@fairyhunter13/ai-sdk 6.0.116-fork.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7582 -0
- package/README.md +238 -0
- package/dist/index.d.mts +6751 -0
- package/dist/index.d.ts +6751 -0
- package/dist/index.js +14155 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +14127 -0
- package/dist/index.mjs.map +1 -0
- package/dist/internal/index.d.mts +324 -0
- package/dist/internal/index.d.ts +324 -0
- package/dist/internal/index.js +1352 -0
- package/dist/internal/index.js.map +1 -0
- package/dist/internal/index.mjs +1336 -0
- package/dist/internal/index.mjs.map +1 -0
- package/dist/test/index.d.mts +265 -0
- package/dist/test/index.d.ts +265 -0
- package/dist/test/index.js +509 -0
- package/dist/test/index.js.map +1 -0
- package/dist/test/index.mjs +472 -0
- package/dist/test/index.mjs.map +1 -0
- package/docs/00-introduction/index.mdx +76 -0
- package/docs/02-foundations/01-overview.mdx +43 -0
- package/docs/02-foundations/02-providers-and-models.mdx +158 -0
- package/docs/02-foundations/03-prompts.mdx +616 -0
- package/docs/02-foundations/04-tools.mdx +251 -0
- package/docs/02-foundations/05-streaming.mdx +62 -0
- package/docs/02-foundations/06-provider-options.mdx +345 -0
- package/docs/02-foundations/index.mdx +49 -0
- package/docs/02-getting-started/00-choosing-a-provider.mdx +110 -0
- package/docs/02-getting-started/01-navigating-the-library.mdx +85 -0
- package/docs/02-getting-started/02-nextjs-app-router.mdx +559 -0
- package/docs/02-getting-started/03-nextjs-pages-router.mdx +542 -0
- package/docs/02-getting-started/04-svelte.mdx +627 -0
- package/docs/02-getting-started/05-nuxt.mdx +566 -0
- package/docs/02-getting-started/06-nodejs.mdx +512 -0
- package/docs/02-getting-started/07-expo.mdx +766 -0
- package/docs/02-getting-started/08-tanstack-start.mdx +583 -0
- package/docs/02-getting-started/09-coding-agents.mdx +179 -0
- package/docs/02-getting-started/index.mdx +44 -0
- package/docs/03-agents/01-overview.mdx +96 -0
- package/docs/03-agents/02-building-agents.mdx +449 -0
- package/docs/03-agents/03-workflows.mdx +386 -0
- package/docs/03-agents/04-loop-control.mdx +394 -0
- package/docs/03-agents/05-configuring-call-options.mdx +286 -0
- package/docs/03-agents/06-memory.mdx +222 -0
- package/docs/03-agents/06-subagents.mdx +362 -0
- package/docs/03-agents/index.mdx +46 -0
- package/docs/03-ai-sdk-core/01-overview.mdx +31 -0
- package/docs/03-ai-sdk-core/05-generating-text.mdx +707 -0
- package/docs/03-ai-sdk-core/10-generating-structured-data.mdx +498 -0
- package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1144 -0
- package/docs/03-ai-sdk-core/16-mcp-tools.mdx +383 -0
- package/docs/03-ai-sdk-core/20-prompt-engineering.mdx +146 -0
- package/docs/03-ai-sdk-core/25-settings.mdx +216 -0
- package/docs/03-ai-sdk-core/26-reasoning.mdx +190 -0
- package/docs/03-ai-sdk-core/30-embeddings.mdx +246 -0
- package/docs/03-ai-sdk-core/31-reranking.mdx +218 -0
- package/docs/03-ai-sdk-core/35-image-generation.mdx +341 -0
- package/docs/03-ai-sdk-core/36-transcription.mdx +227 -0
- package/docs/03-ai-sdk-core/37-speech.mdx +169 -0
- package/docs/03-ai-sdk-core/38-video-generation.mdx +366 -0
- package/docs/03-ai-sdk-core/40-middleware.mdx +485 -0
- package/docs/03-ai-sdk-core/45-provider-management.mdx +349 -0
- package/docs/03-ai-sdk-core/50-error-handling.mdx +149 -0
- package/docs/03-ai-sdk-core/55-testing.mdx +219 -0
- package/docs/03-ai-sdk-core/60-telemetry.mdx +391 -0
- package/docs/03-ai-sdk-core/65-devtools.mdx +107 -0
- package/docs/03-ai-sdk-core/65-event-listeners.mdx +1118 -0
- package/docs/03-ai-sdk-core/index.mdx +99 -0
- package/docs/04-ai-sdk-ui/01-overview.mdx +44 -0
- package/docs/04-ai-sdk-ui/02-chatbot.mdx +1320 -0
- package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +535 -0
- package/docs/04-ai-sdk-ui/03-chatbot-resume-streams.mdx +263 -0
- package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +682 -0
- package/docs/04-ai-sdk-ui/04-generative-user-interfaces.mdx +389 -0
- package/docs/04-ai-sdk-ui/05-completion.mdx +181 -0
- package/docs/04-ai-sdk-ui/08-object-generation.mdx +344 -0
- package/docs/04-ai-sdk-ui/20-streaming-data.mdx +397 -0
- package/docs/04-ai-sdk-ui/21-error-handling.mdx +190 -0
- package/docs/04-ai-sdk-ui/21-transport.mdx +174 -0
- package/docs/04-ai-sdk-ui/24-reading-ui-message-streams.mdx +104 -0
- package/docs/04-ai-sdk-ui/25-message-metadata.mdx +152 -0
- package/docs/04-ai-sdk-ui/50-stream-protocol.mdx +503 -0
- package/docs/04-ai-sdk-ui/index.mdx +64 -0
- package/docs/05-ai-sdk-rsc/01-overview.mdx +45 -0
- package/docs/05-ai-sdk-rsc/02-streaming-react-components.mdx +209 -0
- package/docs/05-ai-sdk-rsc/03-generative-ui-state.mdx +279 -0
- package/docs/05-ai-sdk-rsc/03-saving-and-restoring-states.mdx +105 -0
- package/docs/05-ai-sdk-rsc/04-multistep-interfaces.mdx +282 -0
- package/docs/05-ai-sdk-rsc/05-streaming-values.mdx +157 -0
- package/docs/05-ai-sdk-rsc/06-loading-state.mdx +273 -0
- package/docs/05-ai-sdk-rsc/08-error-handling.mdx +94 -0
- package/docs/05-ai-sdk-rsc/09-authentication.mdx +42 -0
- package/docs/05-ai-sdk-rsc/10-migrating-to-ui.mdx +722 -0
- package/docs/05-ai-sdk-rsc/index.mdx +63 -0
- package/docs/06-advanced/01-prompt-engineering.mdx +96 -0
- package/docs/06-advanced/02-stopping-streams.mdx +184 -0
- package/docs/06-advanced/03-backpressure.mdx +173 -0
- package/docs/06-advanced/04-caching.mdx +169 -0
- package/docs/06-advanced/05-multiple-streamables.mdx +68 -0
- package/docs/06-advanced/06-rate-limiting.mdx +60 -0
- package/docs/06-advanced/07-rendering-ui-with-language-models.mdx +225 -0
- package/docs/06-advanced/08-model-as-router.mdx +120 -0
- package/docs/06-advanced/09-multistep-interfaces.mdx +115 -0
- package/docs/06-advanced/09-sequential-generations.mdx +55 -0
- package/docs/06-advanced/10-vercel-deployment-guide.mdx +117 -0
- package/docs/06-advanced/index.mdx +11 -0
- package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +2785 -0
- package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +3752 -0
- package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +332 -0
- package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +330 -0
- package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +309 -0
- package/docs/07-reference/01-ai-sdk-core/10-generate-image.mdx +251 -0
- package/docs/07-reference/01-ai-sdk-core/11-transcribe.mdx +152 -0
- package/docs/07-reference/01-ai-sdk-core/12-generate-speech.mdx +221 -0
- package/docs/07-reference/01-ai-sdk-core/13-generate-video.mdx +264 -0
- package/docs/07-reference/01-ai-sdk-core/15-agent.mdx +235 -0
- package/docs/07-reference/01-ai-sdk-core/16-tool-loop-agent.mdx +973 -0
- package/docs/07-reference/01-ai-sdk-core/17-create-agent-ui-stream.mdx +154 -0
- package/docs/07-reference/01-ai-sdk-core/18-create-agent-ui-stream-response.mdx +173 -0
- package/docs/07-reference/01-ai-sdk-core/18-pipe-agent-ui-stream-to-response.mdx +150 -0
- package/docs/07-reference/01-ai-sdk-core/20-tool.mdx +209 -0
- package/docs/07-reference/01-ai-sdk-core/22-dynamic-tool.mdx +223 -0
- package/docs/07-reference/01-ai-sdk-core/23-create-mcp-client.mdx +423 -0
- package/docs/07-reference/01-ai-sdk-core/24-mcp-stdio-transport.mdx +68 -0
- package/docs/07-reference/01-ai-sdk-core/25-json-schema.mdx +94 -0
- package/docs/07-reference/01-ai-sdk-core/26-zod-schema.mdx +109 -0
- package/docs/07-reference/01-ai-sdk-core/27-valibot-schema.mdx +58 -0
- package/docs/07-reference/01-ai-sdk-core/28-output.mdx +342 -0
- package/docs/07-reference/01-ai-sdk-core/30-model-message.mdx +435 -0
- package/docs/07-reference/01-ai-sdk-core/31-ui-message.mdx +264 -0
- package/docs/07-reference/01-ai-sdk-core/32-validate-ui-messages.mdx +101 -0
- package/docs/07-reference/01-ai-sdk-core/33-safe-validate-ui-messages.mdx +113 -0
- package/docs/07-reference/01-ai-sdk-core/40-provider-registry.mdx +198 -0
- package/docs/07-reference/01-ai-sdk-core/42-custom-provider.mdx +157 -0
- package/docs/07-reference/01-ai-sdk-core/50-cosine-similarity.mdx +52 -0
- package/docs/07-reference/01-ai-sdk-core/60-wrap-language-model.mdx +59 -0
- package/docs/07-reference/01-ai-sdk-core/61-wrap-image-model.mdx +64 -0
- package/docs/07-reference/01-ai-sdk-core/65-language-model-v2-middleware.mdx +74 -0
- package/docs/07-reference/01-ai-sdk-core/66-extract-reasoning-middleware.mdx +68 -0
- package/docs/07-reference/01-ai-sdk-core/67-simulate-streaming-middleware.mdx +71 -0
- package/docs/07-reference/01-ai-sdk-core/68-default-settings-middleware.mdx +80 -0
- package/docs/07-reference/01-ai-sdk-core/69-add-tool-input-examples-middleware.mdx +155 -0
- package/docs/07-reference/01-ai-sdk-core/70-extract-json-middleware.mdx +147 -0
- package/docs/07-reference/01-ai-sdk-core/70-step-count-is.mdx +84 -0
- package/docs/07-reference/01-ai-sdk-core/71-has-tool-call.mdx +120 -0
- package/docs/07-reference/01-ai-sdk-core/75-simulate-readable-stream.mdx +94 -0
- package/docs/07-reference/01-ai-sdk-core/80-smooth-stream.mdx +145 -0
- package/docs/07-reference/01-ai-sdk-core/90-generate-id.mdx +30 -0
- package/docs/07-reference/01-ai-sdk-core/91-create-id-generator.mdx +89 -0
- package/docs/07-reference/01-ai-sdk-core/92-default-generated-file.mdx +68 -0
- package/docs/07-reference/01-ai-sdk-core/index.mdx +160 -0
- package/docs/07-reference/02-ai-sdk-ui/01-use-chat.mdx +493 -0
- package/docs/07-reference/02-ai-sdk-ui/02-use-completion.mdx +185 -0
- package/docs/07-reference/02-ai-sdk-ui/03-use-object.mdx +196 -0
- package/docs/07-reference/02-ai-sdk-ui/31-convert-to-model-messages.mdx +231 -0
- package/docs/07-reference/02-ai-sdk-ui/32-prune-messages.mdx +108 -0
- package/docs/07-reference/02-ai-sdk-ui/40-create-ui-message-stream.mdx +162 -0
- package/docs/07-reference/02-ai-sdk-ui/41-create-ui-message-stream-response.mdx +119 -0
- package/docs/07-reference/02-ai-sdk-ui/42-pipe-ui-message-stream-to-response.mdx +77 -0
- package/docs/07-reference/02-ai-sdk-ui/43-read-ui-message-stream.mdx +57 -0
- package/docs/07-reference/02-ai-sdk-ui/46-infer-ui-tools.mdx +99 -0
- package/docs/07-reference/02-ai-sdk-ui/47-infer-ui-tool.mdx +75 -0
- package/docs/07-reference/02-ai-sdk-ui/50-direct-chat-transport.mdx +333 -0
- package/docs/07-reference/02-ai-sdk-ui/index.mdx +89 -0
- package/docs/07-reference/03-ai-sdk-rsc/01-stream-ui.mdx +767 -0
- package/docs/07-reference/03-ai-sdk-rsc/02-create-ai.mdx +90 -0
- package/docs/07-reference/03-ai-sdk-rsc/03-create-streamable-ui.mdx +91 -0
- package/docs/07-reference/03-ai-sdk-rsc/04-create-streamable-value.mdx +78 -0
- package/docs/07-reference/03-ai-sdk-rsc/05-read-streamable-value.mdx +79 -0
- package/docs/07-reference/03-ai-sdk-rsc/06-get-ai-state.mdx +50 -0
- package/docs/07-reference/03-ai-sdk-rsc/07-get-mutable-ai-state.mdx +70 -0
- package/docs/07-reference/03-ai-sdk-rsc/08-use-ai-state.mdx +26 -0
- package/docs/07-reference/03-ai-sdk-rsc/09-use-actions.mdx +42 -0
- package/docs/07-reference/03-ai-sdk-rsc/10-use-ui-state.mdx +35 -0
- package/docs/07-reference/03-ai-sdk-rsc/11-use-streamable-value.mdx +46 -0
- package/docs/07-reference/03-ai-sdk-rsc/20-render.mdx +266 -0
- package/docs/07-reference/03-ai-sdk-rsc/index.mdx +67 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-api-call-error.mdx +31 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-download-error.mdx +28 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-empty-response-body-error.mdx +24 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-argument-error.mdx +26 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content-error.mdx +26 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-message-role-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-prompt-error.mdx +47 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-response-data-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-approval-error.mdx +24 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-input-error.mdx +27 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-json-parse-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-load-api-key-error.mdx +24 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-load-setting-error.mdx +24 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-message-conversion-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-content-generated-error.mdx +24 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-image-generated-error.mdx +36 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-object-generated-error.mdx +43 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-output-generated-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-speech-generated-error.mdx +24 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-such-model-error.mdx +26 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-such-provider-error.mdx +28 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-such-tool-error.mdx +26 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-transcript-generated-error.mdx +24 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-video-generated-error.mdx +39 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-retry-error.mdx +27 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-too-many-embedding-values-for-call-error.mdx +27 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-not-found-for-approval-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-repair-error.mdx +28 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-type-validation-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-ui-message-stream-error.mdx +67 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-unsupported-functionality-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/index.mdx +39 -0
- package/docs/07-reference/index.mdx +28 -0
- package/docs/08-migration-guides/00-versioning.mdx +46 -0
- package/docs/08-migration-guides/23-migration-guide-7-0.mdx +95 -0
- package/docs/08-migration-guides/24-migration-guide-6-0.mdx +823 -0
- package/docs/08-migration-guides/25-migration-guide-5-0-data.mdx +882 -0
- package/docs/08-migration-guides/26-migration-guide-5-0.mdx +3427 -0
- package/docs/08-migration-guides/27-migration-guide-4-2.mdx +99 -0
- package/docs/08-migration-guides/28-migration-guide-4-1.mdx +14 -0
- package/docs/08-migration-guides/29-migration-guide-4-0.mdx +1157 -0
- package/docs/08-migration-guides/36-migration-guide-3-4.mdx +14 -0
- package/docs/08-migration-guides/37-migration-guide-3-3.mdx +64 -0
- package/docs/08-migration-guides/38-migration-guide-3-2.mdx +46 -0
- package/docs/08-migration-guides/39-migration-guide-3-1.mdx +168 -0
- package/docs/08-migration-guides/index.mdx +22 -0
- package/docs/09-troubleshooting/01-azure-stream-slow.mdx +33 -0
- package/docs/09-troubleshooting/03-server-actions-in-client-components.mdx +40 -0
- package/docs/09-troubleshooting/04-strange-stream-output.mdx +36 -0
- package/docs/09-troubleshooting/05-streamable-ui-errors.mdx +16 -0
- package/docs/09-troubleshooting/05-tool-invocation-missing-result.mdx +106 -0
- package/docs/09-troubleshooting/06-streaming-not-working-when-deployed.mdx +31 -0
- package/docs/09-troubleshooting/06-streaming-not-working-when-proxied.mdx +31 -0
- package/docs/09-troubleshooting/06-timeout-on-vercel.mdx +60 -0
- package/docs/09-troubleshooting/07-unclosed-streams.mdx +34 -0
- package/docs/09-troubleshooting/08-use-chat-failed-to-parse-stream.mdx +26 -0
- package/docs/09-troubleshooting/09-client-stream-error.mdx +25 -0
- package/docs/09-troubleshooting/10-use-chat-tools-no-response.mdx +32 -0
- package/docs/09-troubleshooting/11-use-chat-custom-request-options.mdx +149 -0
- package/docs/09-troubleshooting/12-typescript-performance-zod.mdx +46 -0
- package/docs/09-troubleshooting/12-use-chat-an-error-occurred.mdx +59 -0
- package/docs/09-troubleshooting/13-repeated-assistant-messages.mdx +73 -0
- package/docs/09-troubleshooting/14-stream-abort-handling.mdx +73 -0
- package/docs/09-troubleshooting/14-tool-calling-with-structured-outputs.mdx +48 -0
- package/docs/09-troubleshooting/15-abort-breaks-resumable-streams.mdx +55 -0
- package/docs/09-troubleshooting/15-stream-text-not-working.mdx +33 -0
- package/docs/09-troubleshooting/16-streaming-status-delay.mdx +63 -0
- package/docs/09-troubleshooting/17-use-chat-stale-body-data.mdx +141 -0
- package/docs/09-troubleshooting/18-ontoolcall-type-narrowing.mdx +66 -0
- package/docs/09-troubleshooting/19-unsupported-model-version.mdx +50 -0
- package/docs/09-troubleshooting/20-no-object-generated-content-filter.mdx +76 -0
- package/docs/09-troubleshooting/21-missing-tool-results-error.mdx +82 -0
- package/docs/09-troubleshooting/30-model-is-not-assignable-to-type.mdx +21 -0
- package/docs/09-troubleshooting/40-typescript-cannot-find-namespace-jsx.mdx +24 -0
- package/docs/09-troubleshooting/50-react-maximum-update-depth-exceeded.mdx +39 -0
- package/docs/09-troubleshooting/60-jest-cannot-find-module-ai-rsc.mdx +22 -0
- package/docs/09-troubleshooting/70-high-memory-usage-with-images.mdx +108 -0
- package/docs/09-troubleshooting/index.mdx +11 -0
- package/internal.d.ts +1 -0
- package/package.json +120 -0
- package/src/agent/agent.ts +156 -0
- package/src/agent/create-agent-ui-stream-response.ts +61 -0
- package/src/agent/create-agent-ui-stream.ts +84 -0
- package/src/agent/index.ts +37 -0
- package/src/agent/infer-agent-tools.ts +7 -0
- package/src/agent/infer-agent-ui-message.ts +11 -0
- package/src/agent/pipe-agent-ui-stream-to-response.ts +64 -0
- package/src/agent/tool-loop-agent-settings.ts +244 -0
- package/src/agent/tool-loop-agent.ts +205 -0
- package/src/embed/embed-events.ts +109 -0
- package/src/embed/embed-many-result.ts +53 -0
- package/src/embed/embed-many.ts +484 -0
- package/src/embed/embed-result.ts +50 -0
- package/src/embed/embed.ts +294 -0
- package/src/embed/index.ts +5 -0
- package/src/error/index.ts +37 -0
- package/src/error/invalid-argument-error.ts +34 -0
- package/src/error/invalid-stream-part-error.ts +28 -0
- package/src/error/invalid-tool-approval-error.ts +26 -0
- package/src/error/invalid-tool-input-error.ts +33 -0
- package/src/error/missing-tool-result-error.ts +28 -0
- package/src/error/no-image-generated-error.ts +39 -0
- package/src/error/no-object-generated-error.ts +70 -0
- package/src/error/no-output-generated-error.ts +26 -0
- package/src/error/no-speech-generated-error.ts +28 -0
- package/src/error/no-such-tool-error.ts +35 -0
- package/src/error/no-transcript-generated-error.ts +30 -0
- package/src/error/no-video-generated-error.ts +57 -0
- package/src/error/tool-call-not-found-for-approval-error.ts +32 -0
- package/src/error/tool-call-repair-error.ts +30 -0
- package/src/error/ui-message-stream-error.ts +48 -0
- package/src/error/unsupported-model-version-error.ts +23 -0
- package/src/error/verify-no-object-generated-error.ts +27 -0
- package/src/generate-image/generate-image-result.ts +42 -0
- package/src/generate-image/generate-image.ts +361 -0
- package/src/generate-image/index.ts +18 -0
- package/src/generate-object/generate-object-result.ts +67 -0
- package/src/generate-object/generate-object.ts +514 -0
- package/src/generate-object/index.ts +9 -0
- package/src/generate-object/inject-json-instruction.ts +30 -0
- package/src/generate-object/output-strategy.ts +415 -0
- package/src/generate-object/parse-and-validate-object-result.ts +111 -0
- package/src/generate-object/repair-text.ts +12 -0
- package/src/generate-object/stream-object-result.ts +120 -0
- package/src/generate-object/stream-object.ts +984 -0
- package/src/generate-object/validate-object-generation-input.ts +144 -0
- package/src/generate-speech/generate-speech-result.ts +30 -0
- package/src/generate-speech/generate-speech.ts +191 -0
- package/src/generate-speech/generated-audio-file.ts +65 -0
- package/src/generate-speech/index.ts +3 -0
- package/src/generate-text/collect-tool-approvals.ts +116 -0
- package/src/generate-text/content-part.ts +31 -0
- package/src/generate-text/core-events.ts +390 -0
- package/src/generate-text/create-execute-tools-transformation.ts +168 -0
- package/src/generate-text/create-stream-text-part-transform.ts +229 -0
- package/src/generate-text/execute-tool-call.ts +190 -0
- package/src/generate-text/extract-reasoning-content.ts +17 -0
- package/src/generate-text/extract-text-content.ts +15 -0
- package/src/generate-text/generate-text-result.ts +168 -0
- package/src/generate-text/generate-text.ts +1411 -0
- package/src/generate-text/generated-file.ts +70 -0
- package/src/generate-text/index.ts +74 -0
- package/src/generate-text/is-approval-needed.ts +29 -0
- package/src/generate-text/output-utils.ts +23 -0
- package/src/generate-text/output.ts +590 -0
- package/src/generate-text/parse-tool-call.ts +188 -0
- package/src/generate-text/prepare-step.ts +103 -0
- package/src/generate-text/prune-messages.ts +167 -0
- package/src/generate-text/reasoning-output.ts +99 -0
- package/src/generate-text/reasoning.ts +10 -0
- package/src/generate-text/response-message.ts +10 -0
- package/src/generate-text/smooth-stream.ts +162 -0
- package/src/generate-text/step-result.ts +310 -0
- package/src/generate-text/stop-condition.ts +29 -0
- package/src/generate-text/stream-text-result.ts +536 -0
- package/src/generate-text/stream-text.ts +2693 -0
- package/src/generate-text/to-response-messages.ts +178 -0
- package/src/generate-text/tool-approval-request-output.ts +21 -0
- package/src/generate-text/tool-call-repair-function.ts +27 -0
- package/src/generate-text/tool-call.ts +47 -0
- package/src/generate-text/tool-error.ts +34 -0
- package/src/generate-text/tool-output-denied.ts +21 -0
- package/src/generate-text/tool-output.ts +7 -0
- package/src/generate-text/tool-result.ts +36 -0
- package/src/generate-text/tool-set.ts +14 -0
- package/src/generate-video/generate-video-result.ts +36 -0
- package/src/generate-video/generate-video.ts +402 -0
- package/src/generate-video/index.ts +3 -0
- package/src/global.ts +36 -0
- package/src/index.ts +49 -0
- package/src/logger/index.ts +6 -0
- package/src/logger/log-warnings.ts +140 -0
- package/src/middleware/add-tool-input-examples-middleware.ts +90 -0
- package/src/middleware/default-embedding-settings-middleware.ts +22 -0
- package/src/middleware/default-settings-middleware.ts +33 -0
- package/src/middleware/extract-json-middleware.ts +197 -0
- package/src/middleware/extract-reasoning-middleware.ts +249 -0
- package/src/middleware/index.ts +10 -0
- package/src/middleware/simulate-streaming-middleware.ts +79 -0
- package/src/middleware/wrap-embedding-model.ts +89 -0
- package/src/middleware/wrap-image-model.ts +92 -0
- package/src/middleware/wrap-language-model.ts +108 -0
- package/src/middleware/wrap-provider.ts +51 -0
- package/src/model/as-embedding-model-v3.ts +24 -0
- package/src/model/as-embedding-model-v4.ts +25 -0
- package/src/model/as-image-model-v3.ts +24 -0
- package/src/model/as-image-model-v4.ts +21 -0
- package/src/model/as-language-model-v3.ts +103 -0
- package/src/model/as-language-model-v4.ts +25 -0
- package/src/model/as-provider-v3.ts +36 -0
- package/src/model/as-provider-v4.ts +47 -0
- package/src/model/as-reranking-model-v4.ts +16 -0
- package/src/model/as-speech-model-v3.ts +24 -0
- package/src/model/as-speech-model-v4.ts +21 -0
- package/src/model/as-transcription-model-v3.ts +24 -0
- package/src/model/as-transcription-model-v4.ts +25 -0
- package/src/model/as-video-model-v4.ts +19 -0
- package/src/model/resolve-model.ts +172 -0
- package/src/prompt/call-settings.ts +177 -0
- package/src/prompt/content-part.ts +236 -0
- package/src/prompt/convert-to-language-model-prompt.ts +548 -0
- package/src/prompt/create-tool-model-output.ts +34 -0
- package/src/prompt/data-content.ts +134 -0
- package/src/prompt/index.ts +27 -0
- package/src/prompt/invalid-data-content-error.ts +29 -0
- package/src/prompt/invalid-message-role-error.ts +27 -0
- package/src/prompt/message-conversion-error.ts +28 -0
- package/src/prompt/message.ts +72 -0
- package/src/prompt/prepare-call-settings.ts +110 -0
- package/src/prompt/prepare-tools-and-tool-choice.ts +86 -0
- package/src/prompt/prompt.ts +43 -0
- package/src/prompt/split-data-url.ts +17 -0
- package/src/prompt/standardize-prompt.ts +99 -0
- package/src/prompt/wrap-gateway-error.ts +29 -0
- package/src/registry/custom-provider.ts +210 -0
- package/src/registry/index.ts +7 -0
- package/src/registry/no-such-provider-error.ts +41 -0
- package/src/registry/provider-registry.ts +331 -0
- package/src/rerank/index.ts +2 -0
- package/src/rerank/rerank-result.ts +70 -0
- package/src/rerank/rerank.ts +239 -0
- package/src/telemetry/assemble-operation-name.ts +21 -0
- package/src/telemetry/get-base-telemetry-attributes.ts +55 -0
- package/src/telemetry/get-global-telemetry-integration.ts +110 -0
- package/src/telemetry/get-tracer.ts +20 -0
- package/src/telemetry/index.ts +4 -0
- package/src/telemetry/noop-tracer.ts +69 -0
- package/src/telemetry/open-telemetry-integration.ts +537 -0
- package/src/telemetry/record-span.ts +75 -0
- package/src/telemetry/select-telemetry-attributes.ts +78 -0
- package/src/telemetry/stringify-for-telemetry.ts +33 -0
- package/src/telemetry/telemetry-integration-registry.ts +22 -0
- package/src/telemetry/telemetry-integration.ts +100 -0
- package/src/telemetry/telemetry-settings.ts +55 -0
- package/src/test/mock-embedding-model-v2.ts +35 -0
- package/src/test/mock-embedding-model-v3.ts +48 -0
- package/src/test/mock-embedding-model-v4.ts +48 -0
- package/src/test/mock-image-model-v2.ts +28 -0
- package/src/test/mock-image-model-v3.ts +28 -0
- package/src/test/mock-image-model-v4.ts +28 -0
- package/src/test/mock-language-model-v2.ts +72 -0
- package/src/test/mock-language-model-v3.ts +77 -0
- package/src/test/mock-language-model-v4.ts +77 -0
- package/src/test/mock-provider-v2.ts +68 -0
- package/src/test/mock-provider-v3.ts +80 -0
- package/src/test/mock-provider-v4.ts +80 -0
- package/src/test/mock-reranking-model-v3.ts +25 -0
- package/src/test/mock-reranking-model-v4.ts +25 -0
- package/src/test/mock-server-response.ts +69 -0
- package/src/test/mock-speech-model-v2.ts +24 -0
- package/src/test/mock-speech-model-v3.ts +24 -0
- package/src/test/mock-speech-model-v4.ts +24 -0
- package/src/test/mock-tracer.ts +156 -0
- package/src/test/mock-transcription-model-v2.ts +24 -0
- package/src/test/mock-transcription-model-v3.ts +24 -0
- package/src/test/mock-transcription-model-v4.ts +24 -0
- package/src/test/mock-values.ts +4 -0
- package/src/test/mock-video-model-v3.ts +28 -0
- package/src/test/mock-video-model-v4.ts +28 -0
- package/src/test/not-implemented.ts +3 -0
- package/src/text-stream/create-text-stream-response.ts +30 -0
- package/src/text-stream/index.ts +2 -0
- package/src/text-stream/pipe-text-stream-to-response.ts +38 -0
- package/src/transcribe/index.ts +2 -0
- package/src/transcribe/transcribe-result.ts +60 -0
- package/src/transcribe/transcribe.ts +187 -0
- package/src/types/embedding-model-middleware.ts +15 -0
- package/src/types/embedding-model.ts +20 -0
- package/src/types/image-model-middleware.ts +15 -0
- package/src/types/image-model-response-metadata.ts +16 -0
- package/src/types/image-model.ts +19 -0
- package/src/types/index.ts +29 -0
- package/src/types/json-value.ts +15 -0
- package/src/types/language-model-middleware.ts +15 -0
- package/src/types/language-model-request-metadata.ts +6 -0
- package/src/types/language-model-response-metadata.ts +21 -0
- package/src/types/language-model.ts +106 -0
- package/src/types/provider-metadata.ts +16 -0
- package/src/types/provider.ts +55 -0
- package/src/types/reranking-model.ts +6 -0
- package/src/types/speech-model-response-metadata.ts +21 -0
- package/src/types/speech-model.ts +10 -0
- package/src/types/transcription-model-response-metadata.ts +16 -0
- package/src/types/transcription-model.ts +14 -0
- package/src/types/usage.ts +200 -0
- package/src/types/video-model-response-metadata.ts +28 -0
- package/src/types/video-model.ts +15 -0
- package/src/types/warning.ts +7 -0
- package/src/ui/call-completion-api.ts +157 -0
- package/src/ui/chat-transport.ts +83 -0
- package/src/ui/chat.ts +786 -0
- package/src/ui/convert-file-list-to-file-ui-parts.ts +36 -0
- package/src/ui/convert-to-model-messages.ts +403 -0
- package/src/ui/default-chat-transport.ts +36 -0
- package/src/ui/direct-chat-transport.ts +117 -0
- package/src/ui/http-chat-transport.ts +273 -0
- package/src/ui/index.ts +76 -0
- package/src/ui/last-assistant-message-is-complete-with-approval-responses.ts +44 -0
- package/src/ui/last-assistant-message-is-complete-with-tool-calls.ts +39 -0
- package/src/ui/process-text-stream.ts +16 -0
- package/src/ui/process-ui-message-stream.ts +858 -0
- package/src/ui/text-stream-chat-transport.ts +23 -0
- package/src/ui/transform-text-to-ui-message-stream.ts +27 -0
- package/src/ui/ui-messages.ts +602 -0
- package/src/ui/use-completion.ts +84 -0
- package/src/ui/validate-ui-messages.ts +521 -0
- package/src/ui-message-stream/create-ui-message-stream-response.ts +44 -0
- package/src/ui-message-stream/create-ui-message-stream.ts +145 -0
- package/src/ui-message-stream/get-response-ui-message-id.ts +35 -0
- package/src/ui-message-stream/handle-ui-message-stream-finish.ts +170 -0
- package/src/ui-message-stream/index.ts +14 -0
- package/src/ui-message-stream/json-to-sse-transform-stream.ts +17 -0
- package/src/ui-message-stream/pipe-ui-message-stream-to-response.ts +51 -0
- package/src/ui-message-stream/read-ui-message-stream.ts +87 -0
- package/src/ui-message-stream/ui-message-chunks.ts +372 -0
- package/src/ui-message-stream/ui-message-stream-headers.ts +7 -0
- package/src/ui-message-stream/ui-message-stream-on-finish-callback.ts +32 -0
- package/src/ui-message-stream/ui-message-stream-on-step-finish-callback.ts +25 -0
- package/src/ui-message-stream/ui-message-stream-response-init.ts +14 -0
- package/src/ui-message-stream/ui-message-stream-writer.ts +24 -0
- package/src/util/as-array.ts +3 -0
- package/src/util/async-iterable-stream.ts +94 -0
- package/src/util/consume-stream.ts +31 -0
- package/src/util/cosine-similarity.ts +46 -0
- package/src/util/create-resolvable-promise.ts +30 -0
- package/src/util/create-stitchable-stream.ts +112 -0
- package/src/util/data-url.ts +17 -0
- package/src/util/deep-partial.ts +84 -0
- package/src/util/detect-media-type.ts +226 -0
- package/src/util/download/create-download.ts +13 -0
- package/src/util/download/download-function.ts +45 -0
- package/src/util/download/download.ts +74 -0
- package/src/util/error-handler.ts +1 -0
- package/src/util/fix-json.ts +401 -0
- package/src/util/get-potential-start-index.ts +39 -0
- package/src/util/index.ts +12 -0
- package/src/util/is-deep-equal-data.ts +48 -0
- package/src/util/is-non-empty-object.ts +5 -0
- package/src/util/job.ts +1 -0
- package/src/util/log-v2-compatibility-warning.ts +21 -0
- package/src/util/merge-abort-signals.ts +43 -0
- package/src/util/merge-objects.ts +79 -0
- package/src/util/notify.ts +22 -0
- package/src/util/now.ts +4 -0
- package/src/util/parse-partial-json.ts +30 -0
- package/src/util/prepare-headers.ts +14 -0
- package/src/util/prepare-retries.ts +47 -0
- package/src/util/retry-error.ts +41 -0
- package/src/util/retry-with-exponential-backoff.ts +154 -0
- package/src/util/serial-job-executor.ts +36 -0
- package/src/util/simulate-readable-stream.ts +39 -0
- package/src/util/split-array.ts +20 -0
- package/src/util/value-of.ts +65 -0
- package/src/util/write-to-server-response.ts +49 -0
- package/src/version.ts +5 -0
- package/test.d.ts +1 -0
|
@@ -0,0 +1,1118 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Event Callbacks
|
|
3
|
+
description: Subscribe to lifecycle events in generateText, streamText, embed, and embedMany calls
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Event Callbacks
|
|
7
|
+
|
|
8
|
+
The AI SDK provides per-call event callbacks that you can pass to `generateText`, `streamText`, `embed`, and `embedMany` to observe lifecycle events. This is useful for building observability tools, logging systems, analytics, and debugging utilities.
|
|
9
|
+
|
|
10
|
+
## Basic Usage
|
|
11
|
+
|
|
12
|
+
Pass callbacks directly to `generateText`, `streamText`, `embed`, or `embedMany`:
|
|
13
|
+
|
|
14
|
+
```ts
|
|
15
|
+
import { generateText } from 'ai';
|
|
16
|
+
|
|
17
|
+
const result = await generateText({
|
|
18
|
+
model: openai('gpt-4o'),
|
|
19
|
+
prompt: 'What is the weather in San Francisco?',
|
|
20
|
+
experimental_onStart: event => {
|
|
21
|
+
console.log('Generation started:', event.model.modelId);
|
|
22
|
+
},
|
|
23
|
+
onFinish: event => {
|
|
24
|
+
console.log('Generation finished:', event.totalUsage);
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Available Callbacks
|
|
30
|
+
|
|
31
|
+
### `generateText` / `streamText`
|
|
32
|
+
|
|
33
|
+
<PropertiesTable
|
|
34
|
+
content={[
|
|
35
|
+
{
|
|
36
|
+
name: 'experimental_onStart',
|
|
37
|
+
type: '(event: OnStartEvent) => void | Promise<void>',
|
|
38
|
+
description: 'Called when generation begins, before any LLM calls.',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'experimental_onStepStart',
|
|
42
|
+
type: '(event: OnStepStartEvent) => void | Promise<void>',
|
|
43
|
+
description:
|
|
44
|
+
'Called when a step (LLM call) begins, before the provider is called.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'experimental_onToolCallStart',
|
|
48
|
+
type: '(event: OnToolCallStartEvent) => void | Promise<void>',
|
|
49
|
+
description: "Called when a tool's execute function is about to run.",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'experimental_onToolCallFinish',
|
|
53
|
+
type: '(event: OnToolCallFinishEvent) => void | Promise<void>',
|
|
54
|
+
description: "Called when a tool's execute function completes or errors.",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'onStepFinish',
|
|
58
|
+
type: '(event: OnStepFinishEvent) => void | Promise<void>',
|
|
59
|
+
description: 'Called when a step (LLM call) completes.',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'onFinish',
|
|
63
|
+
type: '(event: OnFinishEvent) => void | Promise<void>',
|
|
64
|
+
description:
|
|
65
|
+
'Called when the entire generation completes (all steps finished).',
|
|
66
|
+
},
|
|
67
|
+
]}
|
|
68
|
+
/>
|
|
69
|
+
|
|
70
|
+
### `embed` / `embedMany`
|
|
71
|
+
|
|
72
|
+
<PropertiesTable
|
|
73
|
+
content={[
|
|
74
|
+
{
|
|
75
|
+
name: 'experimental_onStart',
|
|
76
|
+
type: '(event: EmbedOnStartEvent) => void | Promise<void>',
|
|
77
|
+
description:
|
|
78
|
+
'Called when the embedding operation begins, before the embedding model is called.',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'experimental_onFinish',
|
|
82
|
+
type: '(event: EmbedOnFinishEvent) => void | Promise<void>',
|
|
83
|
+
description:
|
|
84
|
+
'Called when the embedding operation completes, after the embedding model returns.',
|
|
85
|
+
},
|
|
86
|
+
]}
|
|
87
|
+
/>
|
|
88
|
+
|
|
89
|
+
## Event Reference
|
|
90
|
+
|
|
91
|
+
### `generateText` / `streamText`
|
|
92
|
+
|
|
93
|
+
#### `experimental_onStart`
|
|
94
|
+
|
|
95
|
+
Called when the generation operation begins, before any LLM calls are made.
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
const result = await generateText({
|
|
99
|
+
model: openai('gpt-4o'),
|
|
100
|
+
prompt: 'Hello!',
|
|
101
|
+
experimental_onStart: event => {
|
|
102
|
+
console.log('Model:', event.model.modelId);
|
|
103
|
+
console.log('Temperature:', event.temperature);
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
<PropertiesTable
|
|
109
|
+
content={[
|
|
110
|
+
{
|
|
111
|
+
name: 'model',
|
|
112
|
+
type: '{ provider: string; modelId: string }',
|
|
113
|
+
description: 'The model being used for generation.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'system',
|
|
117
|
+
type: 'string | SystemModelMessage | Array<SystemModelMessage> | undefined',
|
|
118
|
+
description: 'The system message(s) provided to the model.',
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: 'prompt',
|
|
122
|
+
type: 'string | Array<ModelMessage> | undefined',
|
|
123
|
+
description:
|
|
124
|
+
'The prompt string or array of messages if using the prompt option.',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'messages',
|
|
128
|
+
type: 'Array<ModelMessage> | undefined',
|
|
129
|
+
description: 'The messages array if using the messages option.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'tools',
|
|
133
|
+
type: 'ToolSet | undefined',
|
|
134
|
+
description: 'The tools available for this generation.',
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: 'toolChoice',
|
|
138
|
+
type: 'ToolChoice | undefined',
|
|
139
|
+
description: 'The tool choice strategy for this generation.',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'activeTools',
|
|
143
|
+
type: 'Array<keyof TOOLS> | undefined',
|
|
144
|
+
description: 'Limits which tools are available for the model to call.',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: 'maxOutputTokens',
|
|
148
|
+
type: 'number | undefined',
|
|
149
|
+
description: 'Maximum number of tokens to generate.',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
name: 'temperature',
|
|
153
|
+
type: 'number | undefined',
|
|
154
|
+
description: 'Sampling temperature for generation.',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: 'topP',
|
|
158
|
+
type: 'number | undefined',
|
|
159
|
+
description: 'Top-p (nucleus) sampling parameter.',
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
name: 'topK',
|
|
163
|
+
type: 'number | undefined',
|
|
164
|
+
description: 'Top-k sampling parameter.',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: 'presencePenalty',
|
|
168
|
+
type: 'number | undefined',
|
|
169
|
+
description: 'Presence penalty for generation.',
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: 'frequencyPenalty',
|
|
173
|
+
type: 'number | undefined',
|
|
174
|
+
description: 'Frequency penalty for generation.',
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
name: 'stopSequences',
|
|
178
|
+
type: 'string[] | undefined',
|
|
179
|
+
description: 'Sequences that will stop generation.',
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: 'seed',
|
|
183
|
+
type: 'number | undefined',
|
|
184
|
+
description: 'Random seed for reproducible generation.',
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: 'maxRetries',
|
|
188
|
+
type: 'number',
|
|
189
|
+
description: 'Maximum number of retries for failed requests.',
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
name: 'timeout',
|
|
193
|
+
type: 'TimeoutConfiguration | undefined',
|
|
194
|
+
description: 'Timeout configuration for the generation.',
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
name: 'headers',
|
|
198
|
+
type: 'Record<string, string | undefined> | undefined',
|
|
199
|
+
description: 'Additional HTTP headers sent with the request.',
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
name: 'providerOptions',
|
|
203
|
+
type: 'ProviderOptions | undefined',
|
|
204
|
+
description: 'Additional provider-specific options.',
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
name: 'stopWhen',
|
|
208
|
+
type: 'StopCondition | Array<StopCondition> | undefined',
|
|
209
|
+
description: 'Condition(s) for stopping the generation.',
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
name: 'output',
|
|
213
|
+
type: 'Output | undefined',
|
|
214
|
+
description: 'The output specification for structured outputs.',
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
name: 'abortSignal',
|
|
218
|
+
type: 'AbortSignal | undefined',
|
|
219
|
+
description: 'Abort signal for cancelling the operation.',
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
name: 'include',
|
|
223
|
+
type: '{ requestBody?: boolean; responseBody?: boolean } | undefined',
|
|
224
|
+
description:
|
|
225
|
+
'Settings for controlling what data is included in step results.',
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
name: 'functionId',
|
|
229
|
+
type: 'string | undefined',
|
|
230
|
+
description:
|
|
231
|
+
'Identifier from telemetry settings for grouping related operations.',
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
name: 'metadata',
|
|
235
|
+
type: 'Record<string, unknown> | undefined',
|
|
236
|
+
description: 'Additional metadata passed to the generation.',
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
name: 'experimental_context',
|
|
240
|
+
type: 'unknown',
|
|
241
|
+
description:
|
|
242
|
+
'User-defined context object that flows through the entire generation lifecycle.',
|
|
243
|
+
},
|
|
244
|
+
]}
|
|
245
|
+
/>
|
|
246
|
+
|
|
247
|
+
#### `experimental_onStepStart`
|
|
248
|
+
|
|
249
|
+
Called before each step (LLM call) begins. Useful for tracking multi-step generations.
|
|
250
|
+
|
|
251
|
+
```ts
|
|
252
|
+
const result = await generateText({
|
|
253
|
+
model: openai('gpt-4o'),
|
|
254
|
+
prompt: 'Hello!',
|
|
255
|
+
experimental_onStepStart: event => {
|
|
256
|
+
console.log('Step:', event.stepNumber);
|
|
257
|
+
console.log('Messages:', event.messages.length);
|
|
258
|
+
},
|
|
259
|
+
});
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
<PropertiesTable
|
|
263
|
+
content={[
|
|
264
|
+
{
|
|
265
|
+
name: 'stepNumber',
|
|
266
|
+
type: 'number',
|
|
267
|
+
description: 'Zero-based index of the current step.',
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
name: 'model',
|
|
271
|
+
type: '{ provider: string; modelId: string }',
|
|
272
|
+
description: 'The model being used for this step.',
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
name: 'system',
|
|
276
|
+
type: 'string | SystemModelMessage | Array<SystemModelMessage> | undefined',
|
|
277
|
+
description: 'The system message for this step.',
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: 'messages',
|
|
281
|
+
type: 'Array<ModelMessage>',
|
|
282
|
+
description: 'The messages that will be sent to the model for this step.',
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
name: 'tools',
|
|
286
|
+
type: 'ToolSet | undefined',
|
|
287
|
+
description: 'The tools available for this generation.',
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
name: 'toolChoice',
|
|
291
|
+
type: 'LanguageModelV4ToolChoice | undefined',
|
|
292
|
+
description: 'The tool choice configuration for this step.',
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
name: 'activeTools',
|
|
296
|
+
type: 'Array<keyof TOOLS> | undefined',
|
|
297
|
+
description: 'Limits which tools are available for this step.',
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
name: 'steps',
|
|
301
|
+
type: 'ReadonlyArray<StepResult>',
|
|
302
|
+
description:
|
|
303
|
+
'Array of results from previous steps (empty for first step).',
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
name: 'providerOptions',
|
|
307
|
+
type: 'ProviderOptions | undefined',
|
|
308
|
+
description: 'Additional provider-specific options for this step.',
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
name: 'timeout',
|
|
312
|
+
type: 'TimeoutConfiguration | undefined',
|
|
313
|
+
description: 'Timeout configuration for the generation.',
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
name: 'headers',
|
|
317
|
+
type: 'Record<string, string | undefined> | undefined',
|
|
318
|
+
description: 'Additional HTTP headers sent with the request.',
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
name: 'stopWhen',
|
|
322
|
+
type: 'StopCondition | Array<StopCondition> | undefined',
|
|
323
|
+
description: 'Condition(s) for stopping the generation.',
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
name: 'output',
|
|
327
|
+
type: 'Output | undefined',
|
|
328
|
+
description: 'The output specification for structured outputs.',
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
name: 'abortSignal',
|
|
332
|
+
type: 'AbortSignal | undefined',
|
|
333
|
+
description: 'Abort signal for cancelling the operation.',
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
name: 'include',
|
|
337
|
+
type: '{ requestBody?: boolean; responseBody?: boolean } | undefined',
|
|
338
|
+
description:
|
|
339
|
+
'Settings for controlling what data is included in step results.',
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
name: 'functionId',
|
|
343
|
+
type: 'string | undefined',
|
|
344
|
+
description:
|
|
345
|
+
'Identifier from telemetry settings for grouping related operations.',
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
name: 'metadata',
|
|
349
|
+
type: 'Record<string, unknown> | undefined',
|
|
350
|
+
description: 'Additional metadata from telemetry settings.',
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
name: 'experimental_context',
|
|
354
|
+
type: 'unknown',
|
|
355
|
+
description:
|
|
356
|
+
'User-defined context object. May be updated from prepareStep between steps.',
|
|
357
|
+
},
|
|
358
|
+
]}
|
|
359
|
+
/>
|
|
360
|
+
|
|
361
|
+
#### `experimental_onToolCallStart`
|
|
362
|
+
|
|
363
|
+
Called before a tool's `execute` function runs.
|
|
364
|
+
|
|
365
|
+
```ts
|
|
366
|
+
const result = await generateText({
|
|
367
|
+
model: openai('gpt-4o'),
|
|
368
|
+
prompt: 'What is the weather?',
|
|
369
|
+
tools: { getWeather },
|
|
370
|
+
experimental_onToolCallStart: event => {
|
|
371
|
+
console.log('Tool:', event.toolCall.toolName);
|
|
372
|
+
console.log('Input:', event.toolCall.input);
|
|
373
|
+
},
|
|
374
|
+
});
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
<PropertiesTable
|
|
378
|
+
content={[
|
|
379
|
+
{
|
|
380
|
+
name: 'stepNumber',
|
|
381
|
+
type: 'number | undefined',
|
|
382
|
+
description:
|
|
383
|
+
'Zero-based index of the current step where this tool call occurs.',
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
name: 'model',
|
|
387
|
+
type: '{ provider: string; modelId: string } | undefined',
|
|
388
|
+
description: 'The model being used for this step.',
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
name: 'toolCall',
|
|
392
|
+
type: 'TypedToolCall',
|
|
393
|
+
description: 'The full tool call object.',
|
|
394
|
+
properties: [
|
|
395
|
+
{
|
|
396
|
+
type: 'TypedToolCall',
|
|
397
|
+
parameters: [
|
|
398
|
+
{
|
|
399
|
+
name: 'type',
|
|
400
|
+
type: "'tool-call'",
|
|
401
|
+
description: 'The type of the call.',
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
name: 'toolCallId',
|
|
405
|
+
type: 'string',
|
|
406
|
+
description: 'Unique identifier for this tool call.',
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
name: 'toolName',
|
|
410
|
+
type: 'string',
|
|
411
|
+
description: 'Name of the tool being called.',
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
name: 'input',
|
|
415
|
+
type: 'unknown',
|
|
416
|
+
description: 'Input arguments passed to the tool.',
|
|
417
|
+
},
|
|
418
|
+
],
|
|
419
|
+
},
|
|
420
|
+
],
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
name: 'messages',
|
|
424
|
+
type: 'Array<ModelMessage>',
|
|
425
|
+
description:
|
|
426
|
+
'The conversation messages available at tool execution time.',
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
name: 'abortSignal',
|
|
430
|
+
type: 'AbortSignal | undefined',
|
|
431
|
+
description: 'Signal for cancelling the operation.',
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
name: 'functionId',
|
|
435
|
+
type: 'string | undefined',
|
|
436
|
+
description:
|
|
437
|
+
'Identifier from telemetry settings for grouping related operations.',
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
name: 'metadata',
|
|
441
|
+
type: 'Record<string, unknown> | undefined',
|
|
442
|
+
description: 'Additional metadata from telemetry settings.',
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
name: 'experimental_context',
|
|
446
|
+
type: 'unknown',
|
|
447
|
+
description:
|
|
448
|
+
'User-defined context object flowing through the generation.',
|
|
449
|
+
},
|
|
450
|
+
]}
|
|
451
|
+
/>
|
|
452
|
+
|
|
453
|
+
#### `experimental_onToolCallFinish`
|
|
454
|
+
|
|
455
|
+
Called after a tool's `execute` function completes or errors. Uses a discriminated union on the `success` field.
|
|
456
|
+
|
|
457
|
+
```ts
|
|
458
|
+
const result = await generateText({
|
|
459
|
+
model: openai('gpt-4o'),
|
|
460
|
+
prompt: 'What is the weather?',
|
|
461
|
+
tools: { getWeather },
|
|
462
|
+
experimental_onToolCallFinish: event => {
|
|
463
|
+
console.log('Tool:', event.toolCall.toolName);
|
|
464
|
+
console.log('Duration:', event.durationMs, 'ms');
|
|
465
|
+
|
|
466
|
+
if (event.success) {
|
|
467
|
+
console.log('Output:', event.output);
|
|
468
|
+
} else {
|
|
469
|
+
console.error('Error:', event.error);
|
|
470
|
+
}
|
|
471
|
+
},
|
|
472
|
+
});
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
<PropertiesTable
|
|
476
|
+
content={[
|
|
477
|
+
{
|
|
478
|
+
name: 'stepNumber',
|
|
479
|
+
type: 'number | undefined',
|
|
480
|
+
description:
|
|
481
|
+
'Zero-based index of the current step where this tool call occurred.',
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
name: 'model',
|
|
485
|
+
type: '{ provider: string; modelId: string } | undefined',
|
|
486
|
+
description: 'The model being used for this step.',
|
|
487
|
+
},
|
|
488
|
+
{
|
|
489
|
+
name: 'toolCall',
|
|
490
|
+
type: 'TypedToolCall',
|
|
491
|
+
description: 'The full tool call object.',
|
|
492
|
+
properties: [
|
|
493
|
+
{
|
|
494
|
+
type: 'TypedToolCall',
|
|
495
|
+
parameters: [
|
|
496
|
+
{
|
|
497
|
+
name: 'type',
|
|
498
|
+
type: "'tool-call'",
|
|
499
|
+
description: 'The type of the call.',
|
|
500
|
+
},
|
|
501
|
+
{
|
|
502
|
+
name: 'toolCallId',
|
|
503
|
+
type: 'string',
|
|
504
|
+
description: 'Unique identifier for this tool call.',
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
name: 'toolName',
|
|
508
|
+
type: 'string',
|
|
509
|
+
description: 'Name of the tool that was called.',
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
name: 'input',
|
|
513
|
+
type: 'unknown',
|
|
514
|
+
description: 'Input arguments passed to the tool.',
|
|
515
|
+
},
|
|
516
|
+
],
|
|
517
|
+
},
|
|
518
|
+
],
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
name: 'messages',
|
|
522
|
+
type: 'Array<ModelMessage>',
|
|
523
|
+
description:
|
|
524
|
+
'The conversation messages available at tool execution time.',
|
|
525
|
+
},
|
|
526
|
+
{
|
|
527
|
+
name: 'abortSignal',
|
|
528
|
+
type: 'AbortSignal | undefined',
|
|
529
|
+
description: 'Signal for cancelling the operation.',
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
name: 'durationMs',
|
|
533
|
+
type: 'number',
|
|
534
|
+
description: 'Execution time of the tool call in milliseconds.',
|
|
535
|
+
},
|
|
536
|
+
{
|
|
537
|
+
name: 'functionId',
|
|
538
|
+
type: 'string | undefined',
|
|
539
|
+
description:
|
|
540
|
+
'Identifier from telemetry settings for grouping related operations.',
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
name: 'metadata',
|
|
544
|
+
type: 'Record<string, unknown> | undefined',
|
|
545
|
+
description: 'Additional metadata from telemetry settings.',
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
name: 'experimental_context',
|
|
549
|
+
type: 'unknown',
|
|
550
|
+
description:
|
|
551
|
+
'User-defined context object flowing through the generation.',
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
name: 'success',
|
|
555
|
+
type: 'boolean',
|
|
556
|
+
description:
|
|
557
|
+
'Discriminator indicating whether the tool call succeeded. When true, output is available. When false, error is available.',
|
|
558
|
+
},
|
|
559
|
+
{
|
|
560
|
+
name: 'output',
|
|
561
|
+
type: 'unknown',
|
|
562
|
+
description:
|
|
563
|
+
"The tool's return value (only present when success is true).",
|
|
564
|
+
},
|
|
565
|
+
{
|
|
566
|
+
name: 'error',
|
|
567
|
+
type: 'unknown',
|
|
568
|
+
description:
|
|
569
|
+
'The error that occurred during tool execution (only present when success is false).',
|
|
570
|
+
},
|
|
571
|
+
]}
|
|
572
|
+
/>
|
|
573
|
+
|
|
574
|
+
#### `onStepFinish`
|
|
575
|
+
|
|
576
|
+
Called after each step (LLM call) completes. Provides the full `StepResult`.
|
|
577
|
+
|
|
578
|
+
```ts
|
|
579
|
+
const result = await generateText({
|
|
580
|
+
model: openai('gpt-4o'),
|
|
581
|
+
prompt: 'Hello!',
|
|
582
|
+
onStepFinish: event => {
|
|
583
|
+
console.log('Step:', event.stepNumber);
|
|
584
|
+
console.log('Finish reason:', event.finishReason);
|
|
585
|
+
console.log('Tokens:', event.usage.totalTokens);
|
|
586
|
+
},
|
|
587
|
+
});
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
<PropertiesTable
|
|
591
|
+
content={[
|
|
592
|
+
{
|
|
593
|
+
name: 'stepNumber',
|
|
594
|
+
type: 'number',
|
|
595
|
+
description: 'Zero-based index of this step.',
|
|
596
|
+
},
|
|
597
|
+
{
|
|
598
|
+
name: 'model',
|
|
599
|
+
type: '{ provider: string; modelId: string }',
|
|
600
|
+
description: 'Information about the model that produced this step.',
|
|
601
|
+
},
|
|
602
|
+
{
|
|
603
|
+
name: 'finishReason',
|
|
604
|
+
type: "'stop' | 'length' | 'content-filter' | 'tool-calls' | 'error' | 'other'",
|
|
605
|
+
description: 'The unified reason why the generation finished.',
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
name: 'usage',
|
|
609
|
+
type: 'LanguageModelUsage',
|
|
610
|
+
description: 'The token usage of the generated text.',
|
|
611
|
+
properties: [
|
|
612
|
+
{
|
|
613
|
+
type: 'LanguageModelUsage',
|
|
614
|
+
parameters: [
|
|
615
|
+
{
|
|
616
|
+
name: 'inputTokens',
|
|
617
|
+
type: 'number | undefined',
|
|
618
|
+
description: 'The total number of input (prompt) tokens used.',
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
name: 'outputTokens',
|
|
622
|
+
type: 'number | undefined',
|
|
623
|
+
description: 'The number of output (completion) tokens used.',
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
name: 'totalTokens',
|
|
627
|
+
type: 'number | undefined',
|
|
628
|
+
description: 'The total number of tokens used.',
|
|
629
|
+
},
|
|
630
|
+
],
|
|
631
|
+
},
|
|
632
|
+
],
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
name: 'text',
|
|
636
|
+
type: 'string',
|
|
637
|
+
description: 'The generated text.',
|
|
638
|
+
},
|
|
639
|
+
{
|
|
640
|
+
name: 'toolCalls',
|
|
641
|
+
type: 'Array<TypedToolCall>',
|
|
642
|
+
description: 'The tool calls that were made during the generation.',
|
|
643
|
+
},
|
|
644
|
+
{
|
|
645
|
+
name: 'toolResults',
|
|
646
|
+
type: 'Array<TypedToolResult>',
|
|
647
|
+
description: 'The results of the tool calls.',
|
|
648
|
+
},
|
|
649
|
+
{
|
|
650
|
+
name: 'content',
|
|
651
|
+
type: 'Array<ContentPart>',
|
|
652
|
+
description: 'The content that was generated in this step.',
|
|
653
|
+
},
|
|
654
|
+
{
|
|
655
|
+
name: 'reasoning',
|
|
656
|
+
type: 'Array<ReasoningPart | ReasoningFilePart>',
|
|
657
|
+
description: 'The reasoning that was generated during the generation.',
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
name: 'reasoningText',
|
|
661
|
+
type: 'string | undefined',
|
|
662
|
+
description: 'The reasoning text that was generated.',
|
|
663
|
+
},
|
|
664
|
+
{
|
|
665
|
+
name: 'files',
|
|
666
|
+
type: 'Array<GeneratedFile>',
|
|
667
|
+
description: 'The files that were generated during the generation.',
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
name: 'sources',
|
|
671
|
+
type: 'Array<Source>',
|
|
672
|
+
description: 'The sources that were used to generate the text.',
|
|
673
|
+
},
|
|
674
|
+
{
|
|
675
|
+
name: 'warnings',
|
|
676
|
+
type: 'CallWarning[] | undefined',
|
|
677
|
+
description: 'Warnings from the model provider.',
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
name: 'request',
|
|
681
|
+
type: 'LanguageModelRequestMetadata',
|
|
682
|
+
description: 'Additional request information.',
|
|
683
|
+
},
|
|
684
|
+
{
|
|
685
|
+
name: 'response',
|
|
686
|
+
type: 'LanguageModelResponseMetadata',
|
|
687
|
+
description:
|
|
688
|
+
'Additional response information including id, modelId, timestamp, headers, and messages.',
|
|
689
|
+
},
|
|
690
|
+
{
|
|
691
|
+
name: 'functionId',
|
|
692
|
+
type: 'string | undefined',
|
|
693
|
+
description:
|
|
694
|
+
'Identifier from telemetry settings for grouping related operations.',
|
|
695
|
+
},
|
|
696
|
+
{
|
|
697
|
+
name: 'metadata',
|
|
698
|
+
type: 'Record<string, unknown> | undefined',
|
|
699
|
+
description: 'Additional metadata from telemetry settings.',
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
name: 'experimental_context',
|
|
703
|
+
type: 'unknown',
|
|
704
|
+
description:
|
|
705
|
+
'User-defined context object flowing through the generation.',
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
name: 'providerMetadata',
|
|
709
|
+
type: 'ProviderMetadata | undefined',
|
|
710
|
+
description: 'Additional provider-specific metadata.',
|
|
711
|
+
},
|
|
712
|
+
]}
|
|
713
|
+
/>
|
|
714
|
+
|
|
715
|
+
#### `onFinish`
|
|
716
|
+
|
|
717
|
+
Called when the entire generation completes (all steps finished). Includes aggregated data.
|
|
718
|
+
|
|
719
|
+
```ts
|
|
720
|
+
const result = await generateText({
|
|
721
|
+
model: openai('gpt-4o'),
|
|
722
|
+
prompt: 'Hello!',
|
|
723
|
+
onFinish: event => {
|
|
724
|
+
console.log('Total steps:', event.steps.length);
|
|
725
|
+
console.log('Total tokens:', event.totalUsage.totalTokens);
|
|
726
|
+
console.log('Final text:', event.text);
|
|
727
|
+
},
|
|
728
|
+
});
|
|
729
|
+
```
|
|
730
|
+
|
|
731
|
+
<PropertiesTable
|
|
732
|
+
content={[
|
|
733
|
+
{
|
|
734
|
+
name: 'steps',
|
|
735
|
+
type: 'Array<StepResult>',
|
|
736
|
+
description: 'Array containing results from all steps in the generation.',
|
|
737
|
+
},
|
|
738
|
+
{
|
|
739
|
+
name: 'totalUsage',
|
|
740
|
+
type: 'LanguageModelUsage',
|
|
741
|
+
description: 'Aggregated token usage across all steps.',
|
|
742
|
+
properties: [
|
|
743
|
+
{
|
|
744
|
+
type: 'LanguageModelUsage',
|
|
745
|
+
parameters: [
|
|
746
|
+
{
|
|
747
|
+
name: 'inputTokens',
|
|
748
|
+
type: 'number | undefined',
|
|
749
|
+
description:
|
|
750
|
+
'The total number of input tokens used across all steps.',
|
|
751
|
+
},
|
|
752
|
+
{
|
|
753
|
+
name: 'outputTokens',
|
|
754
|
+
type: 'number | undefined',
|
|
755
|
+
description:
|
|
756
|
+
'The total number of output tokens used across all steps.',
|
|
757
|
+
},
|
|
758
|
+
{
|
|
759
|
+
name: 'totalTokens',
|
|
760
|
+
type: 'number | undefined',
|
|
761
|
+
description: 'The total number of tokens used across all steps.',
|
|
762
|
+
},
|
|
763
|
+
],
|
|
764
|
+
},
|
|
765
|
+
],
|
|
766
|
+
},
|
|
767
|
+
{
|
|
768
|
+
name: 'stepNumber',
|
|
769
|
+
type: 'number',
|
|
770
|
+
description: 'Zero-based index of the final step.',
|
|
771
|
+
},
|
|
772
|
+
{
|
|
773
|
+
name: 'model',
|
|
774
|
+
type: '{ provider: string; modelId: string }',
|
|
775
|
+
description: 'Information about the model that produced the final step.',
|
|
776
|
+
},
|
|
777
|
+
{
|
|
778
|
+
name: 'finishReason',
|
|
779
|
+
type: "'stop' | 'length' | 'content-filter' | 'tool-calls' | 'error' | 'other'",
|
|
780
|
+
description: 'The unified reason why the generation finished.',
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
name: 'usage',
|
|
784
|
+
type: 'LanguageModelUsage',
|
|
785
|
+
description: 'The token usage from the final step only (not aggregated).',
|
|
786
|
+
},
|
|
787
|
+
{
|
|
788
|
+
name: 'text',
|
|
789
|
+
type: 'string',
|
|
790
|
+
description: 'The full text that has been generated.',
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
name: 'toolCalls',
|
|
794
|
+
type: 'Array<TypedToolCall>',
|
|
795
|
+
description: 'The tool calls that were made in the final step.',
|
|
796
|
+
},
|
|
797
|
+
{
|
|
798
|
+
name: 'toolResults',
|
|
799
|
+
type: 'Array<TypedToolResult>',
|
|
800
|
+
description: 'The results of the tool calls from the final step.',
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
name: 'content',
|
|
804
|
+
type: 'Array<ContentPart>',
|
|
805
|
+
description: 'The content that was generated in the final step.',
|
|
806
|
+
},
|
|
807
|
+
{
|
|
808
|
+
name: 'reasoning',
|
|
809
|
+
type: 'Array<ReasoningPart | ReasoningFilePart>',
|
|
810
|
+
description: 'The reasoning that was generated.',
|
|
811
|
+
},
|
|
812
|
+
{
|
|
813
|
+
name: 'reasoningText',
|
|
814
|
+
type: 'string | undefined',
|
|
815
|
+
description: 'The reasoning text that was generated.',
|
|
816
|
+
},
|
|
817
|
+
{
|
|
818
|
+
name: 'files',
|
|
819
|
+
type: 'Array<GeneratedFile>',
|
|
820
|
+
description: 'Files that were generated in the final step.',
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
name: 'sources',
|
|
824
|
+
type: 'Array<Source>',
|
|
825
|
+
description:
|
|
826
|
+
'Sources that have been used as input to generate the response.',
|
|
827
|
+
},
|
|
828
|
+
{
|
|
829
|
+
name: 'warnings',
|
|
830
|
+
type: 'CallWarning[] | undefined',
|
|
831
|
+
description: 'Warnings from the model provider.',
|
|
832
|
+
},
|
|
833
|
+
{
|
|
834
|
+
name: 'request',
|
|
835
|
+
type: 'LanguageModelRequestMetadata',
|
|
836
|
+
description: 'Additional request information from the final step.',
|
|
837
|
+
},
|
|
838
|
+
{
|
|
839
|
+
name: 'response',
|
|
840
|
+
type: 'LanguageModelResponseMetadata',
|
|
841
|
+
description: 'Additional response information from the final step.',
|
|
842
|
+
},
|
|
843
|
+
{
|
|
844
|
+
name: 'functionId',
|
|
845
|
+
type: 'string | undefined',
|
|
846
|
+
description:
|
|
847
|
+
'Identifier from telemetry settings for grouping related operations.',
|
|
848
|
+
},
|
|
849
|
+
{
|
|
850
|
+
name: 'metadata',
|
|
851
|
+
type: 'Record<string, unknown> | undefined',
|
|
852
|
+
description: 'Additional metadata from telemetry settings.',
|
|
853
|
+
},
|
|
854
|
+
{
|
|
855
|
+
name: 'experimental_context',
|
|
856
|
+
type: 'unknown',
|
|
857
|
+
description: 'The final state of the user-defined context object.',
|
|
858
|
+
},
|
|
859
|
+
{
|
|
860
|
+
name: 'providerMetadata',
|
|
861
|
+
type: 'ProviderMetadata | undefined',
|
|
862
|
+
description: 'Additional provider-specific metadata from the final step.',
|
|
863
|
+
},
|
|
864
|
+
]}
|
|
865
|
+
/>
|
|
866
|
+
|
|
867
|
+
### `embed` / `embedMany`
|
|
868
|
+
|
|
869
|
+
#### `experimental_onStart`
|
|
870
|
+
|
|
871
|
+
Called when the embedding operation begins, before the embedding model is called. Both `embed` and `embedMany` share the same event interface; the `operationId` field distinguishes them (`'ai.embed'` vs `'ai.embedMany'`), and the `value` field is a single string for `embed` or an array of strings for `embedMany`.
|
|
872
|
+
|
|
873
|
+
```ts
|
|
874
|
+
import { embed } from 'ai';
|
|
875
|
+
|
|
876
|
+
const result = await embed({
|
|
877
|
+
model: openai.embedding('text-embedding-3-small'),
|
|
878
|
+
value: 'sunny day at the beach',
|
|
879
|
+
experimental_onStart: event => {
|
|
880
|
+
console.log('Operation:', event.operationId);
|
|
881
|
+
console.log('Model:', event.model.modelId);
|
|
882
|
+
},
|
|
883
|
+
});
|
|
884
|
+
```
|
|
885
|
+
|
|
886
|
+
<PropertiesTable
|
|
887
|
+
content={[
|
|
888
|
+
{
|
|
889
|
+
name: 'callId',
|
|
890
|
+
type: 'string',
|
|
891
|
+
description: 'Unique identifier for this embed call.',
|
|
892
|
+
},
|
|
893
|
+
{
|
|
894
|
+
name: 'operationId',
|
|
895
|
+
type: 'string',
|
|
896
|
+
description:
|
|
897
|
+
"Identifies the operation type ('ai.embed' or 'ai.embedMany').",
|
|
898
|
+
},
|
|
899
|
+
{
|
|
900
|
+
name: 'model',
|
|
901
|
+
type: '{ provider: string; modelId: string }',
|
|
902
|
+
description: 'The embedding model being used.',
|
|
903
|
+
},
|
|
904
|
+
{
|
|
905
|
+
name: 'value',
|
|
906
|
+
type: 'string | Array<string>',
|
|
907
|
+
description:
|
|
908
|
+
'The value(s) being embedded. A single string for embed, or an array for embedMany.',
|
|
909
|
+
},
|
|
910
|
+
{
|
|
911
|
+
name: 'maxRetries',
|
|
912
|
+
type: 'number',
|
|
913
|
+
description: 'Maximum number of retries for failed requests.',
|
|
914
|
+
},
|
|
915
|
+
{
|
|
916
|
+
name: 'abortSignal',
|
|
917
|
+
type: 'AbortSignal | undefined',
|
|
918
|
+
description: 'Abort signal for cancelling the operation.',
|
|
919
|
+
},
|
|
920
|
+
{
|
|
921
|
+
name: 'headers',
|
|
922
|
+
type: 'Record<string, string | undefined> | undefined',
|
|
923
|
+
description: 'Additional HTTP headers sent with the request.',
|
|
924
|
+
},
|
|
925
|
+
{
|
|
926
|
+
name: 'providerOptions',
|
|
927
|
+
type: 'ProviderOptions | undefined',
|
|
928
|
+
description: 'Additional provider-specific options.',
|
|
929
|
+
},
|
|
930
|
+
{
|
|
931
|
+
name: 'functionId',
|
|
932
|
+
type: 'string | undefined',
|
|
933
|
+
description:
|
|
934
|
+
'Identifier from telemetry settings for grouping related operations.',
|
|
935
|
+
},
|
|
936
|
+
{
|
|
937
|
+
name: 'metadata',
|
|
938
|
+
type: 'Record<string, JSONValue> | undefined',
|
|
939
|
+
description: 'Additional metadata from telemetry settings.',
|
|
940
|
+
},
|
|
941
|
+
]}
|
|
942
|
+
/>
|
|
943
|
+
|
|
944
|
+
#### `experimental_onFinish`
|
|
945
|
+
|
|
946
|
+
Called when the embedding operation completes. For `embed`, `embedding` is a single vector and `response` is a single response object. For `embedMany`, `embedding` is an array of vectors and `response` is an array of response objects (one per chunk).
|
|
947
|
+
|
|
948
|
+
```ts
|
|
949
|
+
import { embedMany } from 'ai';
|
|
950
|
+
|
|
951
|
+
const result = await embedMany({
|
|
952
|
+
model: openai.embedding('text-embedding-3-small'),
|
|
953
|
+
values: ['sunny day at the beach', 'rainy afternoon in the city'],
|
|
954
|
+
experimental_onFinish: event => {
|
|
955
|
+
console.log('Operation:', event.operationId);
|
|
956
|
+
console.log('Usage:', event.usage);
|
|
957
|
+
},
|
|
958
|
+
});
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
<PropertiesTable
|
|
962
|
+
content={[
|
|
963
|
+
{
|
|
964
|
+
name: 'callId',
|
|
965
|
+
type: 'string',
|
|
966
|
+
description: 'Unique identifier for this embed call.',
|
|
967
|
+
},
|
|
968
|
+
{
|
|
969
|
+
name: 'operationId',
|
|
970
|
+
type: 'string',
|
|
971
|
+
description:
|
|
972
|
+
"Identifies the operation type ('ai.embed' or 'ai.embedMany').",
|
|
973
|
+
},
|
|
974
|
+
{
|
|
975
|
+
name: 'model',
|
|
976
|
+
type: '{ provider: string; modelId: string }',
|
|
977
|
+
description: 'The embedding model that was used.',
|
|
978
|
+
},
|
|
979
|
+
{
|
|
980
|
+
name: 'value',
|
|
981
|
+
type: 'string | Array<string>',
|
|
982
|
+
description: 'The value(s) that were embedded.',
|
|
983
|
+
},
|
|
984
|
+
{
|
|
985
|
+
name: 'embedding',
|
|
986
|
+
type: 'Embedding | Array<Embedding>',
|
|
987
|
+
description:
|
|
988
|
+
'The resulting embedding(s). A single vector for embed, or an array for embedMany.',
|
|
989
|
+
},
|
|
990
|
+
{
|
|
991
|
+
name: 'usage',
|
|
992
|
+
type: 'EmbeddingModelUsage',
|
|
993
|
+
description: 'Token usage for the embedding operation.',
|
|
994
|
+
},
|
|
995
|
+
{
|
|
996
|
+
name: 'warnings',
|
|
997
|
+
type: 'Array<Warning>',
|
|
998
|
+
description: 'Warnings from the embedding model.',
|
|
999
|
+
},
|
|
1000
|
+
{
|
|
1001
|
+
name: 'providerMetadata',
|
|
1002
|
+
type: 'ProviderMetadata | undefined',
|
|
1003
|
+
description: 'Optional provider-specific metadata.',
|
|
1004
|
+
},
|
|
1005
|
+
{
|
|
1006
|
+
name: 'response',
|
|
1007
|
+
type: '{ headers?: Record<string, string>; body?: unknown } | Array<{ headers?: Record<string, string>; body?: unknown } | undefined> | undefined',
|
|
1008
|
+
description:
|
|
1009
|
+
'Response data. A single response for embed, or an array for embedMany (one per chunk).',
|
|
1010
|
+
},
|
|
1011
|
+
{
|
|
1012
|
+
name: 'functionId',
|
|
1013
|
+
type: 'string | undefined',
|
|
1014
|
+
description:
|
|
1015
|
+
'Identifier from telemetry settings for grouping related operations.',
|
|
1016
|
+
},
|
|
1017
|
+
{
|
|
1018
|
+
name: 'metadata',
|
|
1019
|
+
type: 'Record<string, JSONValue> | undefined',
|
|
1020
|
+
description: 'Additional metadata from telemetry settings.',
|
|
1021
|
+
},
|
|
1022
|
+
]}
|
|
1023
|
+
/>
|
|
1024
|
+
|
|
1025
|
+
## Use Cases
|
|
1026
|
+
|
|
1027
|
+
### Logging and Debugging
|
|
1028
|
+
|
|
1029
|
+
```ts
|
|
1030
|
+
import { generateText } from 'ai';
|
|
1031
|
+
|
|
1032
|
+
const result = await generateText({
|
|
1033
|
+
model: openai('gpt-4o'),
|
|
1034
|
+
prompt: 'Hello!',
|
|
1035
|
+
experimental_onStart: event => {
|
|
1036
|
+
console.log(`[${new Date().toISOString()}] Generation started`, {
|
|
1037
|
+
model: event.model.modelId,
|
|
1038
|
+
provider: event.model.provider,
|
|
1039
|
+
});
|
|
1040
|
+
},
|
|
1041
|
+
onStepFinish: event => {
|
|
1042
|
+
console.log(
|
|
1043
|
+
`[${new Date().toISOString()}] Step ${event.stepNumber} finished`,
|
|
1044
|
+
{
|
|
1045
|
+
finishReason: event.finishReason,
|
|
1046
|
+
tokens: event.usage.totalTokens,
|
|
1047
|
+
},
|
|
1048
|
+
);
|
|
1049
|
+
},
|
|
1050
|
+
onFinish: event => {
|
|
1051
|
+
console.log(`[${new Date().toISOString()}] Generation complete`, {
|
|
1052
|
+
totalSteps: event.steps.length,
|
|
1053
|
+
totalTokens: event.totalUsage.totalTokens,
|
|
1054
|
+
});
|
|
1055
|
+
},
|
|
1056
|
+
});
|
|
1057
|
+
```
|
|
1058
|
+
|
|
1059
|
+
### Tool Execution Monitoring
|
|
1060
|
+
|
|
1061
|
+
```ts
|
|
1062
|
+
import { generateText } from 'ai';
|
|
1063
|
+
|
|
1064
|
+
const result = await generateText({
|
|
1065
|
+
model: openai('gpt-4o'),
|
|
1066
|
+
prompt: 'What is the weather?',
|
|
1067
|
+
tools: { getWeather },
|
|
1068
|
+
experimental_onToolCallStart: event => {
|
|
1069
|
+
console.log(`Tool "${event.toolCall.toolName}" starting...`);
|
|
1070
|
+
},
|
|
1071
|
+
experimental_onToolCallFinish: event => {
|
|
1072
|
+
if (event.success) {
|
|
1073
|
+
console.log(
|
|
1074
|
+
`Tool "${event.toolCall.toolName}" completed in ${event.durationMs}ms`,
|
|
1075
|
+
);
|
|
1076
|
+
} else {
|
|
1077
|
+
console.error(`Tool "${event.toolCall.toolName}" failed:`, event.error);
|
|
1078
|
+
}
|
|
1079
|
+
},
|
|
1080
|
+
});
|
|
1081
|
+
```
|
|
1082
|
+
|
|
1083
|
+
### Embedding Observability
|
|
1084
|
+
|
|
1085
|
+
```ts
|
|
1086
|
+
import { embedMany } from 'ai';
|
|
1087
|
+
|
|
1088
|
+
const result = await embedMany({
|
|
1089
|
+
model: openai.embedding('text-embedding-3-small'),
|
|
1090
|
+
values: ['sunny day at the beach', 'rainy afternoon in the city'],
|
|
1091
|
+
experimental_onStart: event => {
|
|
1092
|
+
console.log(`Embedding started (${event.operationId})`, {
|
|
1093
|
+
model: event.model.modelId,
|
|
1094
|
+
valueCount: Array.isArray(event.value) ? event.value.length : 1,
|
|
1095
|
+
});
|
|
1096
|
+
},
|
|
1097
|
+
experimental_onFinish: event => {
|
|
1098
|
+
console.log(`Embedding complete (${event.operationId})`, {
|
|
1099
|
+
tokens: event.usage.tokens,
|
|
1100
|
+
});
|
|
1101
|
+
},
|
|
1102
|
+
});
|
|
1103
|
+
```
|
|
1104
|
+
|
|
1105
|
+
## Error Handling
|
|
1106
|
+
|
|
1107
|
+
Errors thrown inside callbacks are caught and do not break the generation or embedding flow. This ensures that monitoring code cannot disrupt your application:
|
|
1108
|
+
|
|
1109
|
+
```ts
|
|
1110
|
+
const result = await generateText({
|
|
1111
|
+
model: openai('gpt-4o'),
|
|
1112
|
+
prompt: 'Hello!',
|
|
1113
|
+
experimental_onStart: () => {
|
|
1114
|
+
throw new Error('This error is caught internally');
|
|
1115
|
+
// Generation continues normally
|
|
1116
|
+
},
|
|
1117
|
+
});
|
|
1118
|
+
```
|