@fondation-io/ai 7.0.0-beta.45
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 +7687 -0
- package/README.md +238 -0
- package/dist/index.d.mts +7056 -0
- package/dist/index.d.ts +7056 -0
- package/dist/index.js +14607 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +14578 -0
- package/dist/index.mjs.map +1 -0
- package/dist/internal/index.d.mts +303 -0
- package/dist/internal/index.d.ts +303 -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 +160 -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 +1148 -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 +236 -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 +1303 -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 +534 -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 +323 -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 +252 -0
- package/src/agent/tool-loop-agent.ts +205 -0
- package/src/embed/embed-events.ts +181 -0
- package/src/embed/embed-many-result.ts +53 -0
- package/src/embed/embed-many.ts +428 -0
- package/src/embed/embed-result.ts +50 -0
- package/src/embed/embed.ts +266 -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 +144 -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 +1445 -0
- package/src/generate-text/generated-file.ts +70 -0
- package/src/generate-text/index.ts +78 -0
- package/src/generate-text/invoke-tool-callbacks-from-stream.ts +81 -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-model-call.ts +418 -0
- package/src/generate-text/stream-text-result.ts +536 -0
- package/src/generate-text/stream-text.ts +2696 -0
- package/src/generate-text/to-response-messages.ts +195 -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 +169 -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 +8 -0
- package/src/rerank/rerank-events.ts +189 -0
- package/src/rerank/rerank-result.ts +70 -0
- package/src/rerank/rerank.ts +348 -0
- package/src/telemetry/assemble-operation-name.ts +21 -0
- package/src/telemetry/get-base-telemetry-attributes.ts +45 -0
- package/src/telemetry/get-global-telemetry-integration.ts +126 -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 +875 -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 +139 -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,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: pruneMessages
|
|
3
|
+
description: API Reference for pruneMessages.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `pruneMessages()`
|
|
7
|
+
|
|
8
|
+
The `pruneMessages` function is used to prune or filter an array of `ModelMessage` objects. This is useful for reducing message context (to save tokens), removing intermediate reasoning, or trimming tool calls and empty messages before sending to an LLM.
|
|
9
|
+
|
|
10
|
+
```ts filename="app/api/chat/route.ts"
|
|
11
|
+
import { pruneMessages, streamText } from 'ai';
|
|
12
|
+
__PROVIDER_IMPORT__;
|
|
13
|
+
|
|
14
|
+
export async function POST(req: Request) {
|
|
15
|
+
const { messages } = await req.json();
|
|
16
|
+
|
|
17
|
+
const prunedMessages = pruneMessages({
|
|
18
|
+
messages,
|
|
19
|
+
reasoning: 'before-last-message',
|
|
20
|
+
toolCalls: 'before-last-2-messages',
|
|
21
|
+
emptyMessages: 'remove',
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const result = streamText({
|
|
25
|
+
model: __MODEL__,
|
|
26
|
+
messages: prunedMessages,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
return result.toUIMessageStreamResponse();
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Import
|
|
34
|
+
|
|
35
|
+
<Snippet text={`import { pruneMessages } from "ai"`} prompt={false} />
|
|
36
|
+
|
|
37
|
+
## API Signature
|
|
38
|
+
|
|
39
|
+
### Parameters
|
|
40
|
+
|
|
41
|
+
<PropertiesTable
|
|
42
|
+
content={[
|
|
43
|
+
{
|
|
44
|
+
name: 'messages',
|
|
45
|
+
type: 'ModelMessage[]',
|
|
46
|
+
description: 'An array of ModelMessage objects to prune.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'reasoning',
|
|
50
|
+
type: `'all' | 'before-last-message' | 'none'`,
|
|
51
|
+
description:
|
|
52
|
+
'How to remove reasoning content from assistant messages. Default: "none".',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'toolCalls',
|
|
56
|
+
type: `'all' | 'before-last-message' | 'before-last-\${number}-messages' | 'none' | Array<{ type: 'all' | 'before-last-message' | 'before-last-\${number}-messages'; tools?: string[] }>`,
|
|
57
|
+
description:
|
|
58
|
+
'How to prune tool call/results/approval content. Can specify a strategy string or an array for per-tool fine control. Default: [] (empty array, equivalent to "none").',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'emptyMessages',
|
|
62
|
+
type: `'keep' | 'remove'`,
|
|
63
|
+
description:
|
|
64
|
+
'Whether to keep or remove messages whose content is empty after pruning. Default: "remove".',
|
|
65
|
+
},
|
|
66
|
+
]}
|
|
67
|
+
/>
|
|
68
|
+
|
|
69
|
+
### Returns
|
|
70
|
+
|
|
71
|
+
An array of [`ModelMessage`](/docs/reference/ai-sdk-core/model-message) objects, pruned according to the provided options.
|
|
72
|
+
|
|
73
|
+
<PropertiesTable
|
|
74
|
+
content={[
|
|
75
|
+
{
|
|
76
|
+
name: 'ModelMessage[]',
|
|
77
|
+
type: 'Array',
|
|
78
|
+
description: 'The pruned list of ModelMessage objects',
|
|
79
|
+
},
|
|
80
|
+
]}
|
|
81
|
+
/>
|
|
82
|
+
|
|
83
|
+
## Example Usage
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
import { pruneMessages } from 'ai';
|
|
87
|
+
|
|
88
|
+
const pruned = pruneMessages({
|
|
89
|
+
messages,
|
|
90
|
+
reasoning: 'all', // Remove all reasoning parts
|
|
91
|
+
toolCalls: 'before-last-message', // Remove tool calls except those in the last message
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Pruning Options
|
|
96
|
+
|
|
97
|
+
- **reasoning:** Removes reasoning parts from assistant messages. Use `'all'` to remove all, `'before-last-message'` to keep reasoning in the last message, or `'none'` to retain all reasoning.
|
|
98
|
+
- **toolCalls:** Prune tool-call, tool-result, and tool-approval chunks from assistant/tool messages. Default is an empty array (no pruning). Options include:
|
|
99
|
+
- `'all'`: Prune all such content.
|
|
100
|
+
- `'before-last-message'`: Prune except in the last message.
|
|
101
|
+
- `'before-last-N-messages'`: Prune except in the last N messages.
|
|
102
|
+
- `'none'`: Do not prune.
|
|
103
|
+
- Or provide an array for per-tool fine control, e.g., `[{ type: 'before-last-message', tools: ['search', 'calculator'] }]` to prune only specific tools.
|
|
104
|
+
- **emptyMessages:** Set to `'remove'` (default) to exclude messages that have no content after pruning.
|
|
105
|
+
|
|
106
|
+
> **Tip**: `pruneMessages` is typically used prior to sending a context window to an LLM to reduce message/token count, especially after a series of tool-calls and approvals.
|
|
107
|
+
|
|
108
|
+
For advanced usage and the full list of possible message parts, see [`ModelMessage`](/docs/reference/ai-sdk-core/model-message) and [`pruneMessages` implementation](https://github.com/vercel/ai/blob/main/packages/ai/src/generate-text/prune-messages.ts).
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: createUIMessageStream
|
|
3
|
+
description: API Reference for createUIMessageStream.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `createUIMessageStream`
|
|
7
|
+
|
|
8
|
+
The `createUIMessageStream` function allows you to create a readable stream for UI messages with advanced features like message merging, error handling, and finish callbacks.
|
|
9
|
+
|
|
10
|
+
## Import
|
|
11
|
+
|
|
12
|
+
<Snippet text={`import { createUIMessageStream } from "ai"`} prompt={false} />
|
|
13
|
+
|
|
14
|
+
## Example
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
const existingMessages: UIMessage[] = [
|
|
18
|
+
/* ... */
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
const stream = createUIMessageStream({
|
|
22
|
+
async execute({ writer }) {
|
|
23
|
+
// Start a text message
|
|
24
|
+
// Note: The id must be consistent across text-start, text-delta, and text-end steps
|
|
25
|
+
// This allows the system to correctly identify they belong to the same text block
|
|
26
|
+
writer.write({
|
|
27
|
+
type: 'text-start',
|
|
28
|
+
id: 'example-text',
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Write a message chunk
|
|
32
|
+
writer.write({
|
|
33
|
+
type: 'text-delta',
|
|
34
|
+
id: 'example-text',
|
|
35
|
+
delta: 'Hello',
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// End the text message
|
|
39
|
+
writer.write({
|
|
40
|
+
type: 'text-end',
|
|
41
|
+
id: 'example-text',
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Merge another stream from streamText
|
|
45
|
+
const result = streamText({
|
|
46
|
+
model: __MODEL__,
|
|
47
|
+
prompt: 'Write a haiku about AI',
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
writer.merge(result.toUIMessageStream());
|
|
51
|
+
},
|
|
52
|
+
onError: error => `Custom error: ${error.message}`,
|
|
53
|
+
originalMessages: existingMessages,
|
|
54
|
+
onFinish: ({ messages, isContinuation, responseMessage }) => {
|
|
55
|
+
console.log('Stream finished with messages:', messages);
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## API Signature
|
|
61
|
+
|
|
62
|
+
### Parameters
|
|
63
|
+
|
|
64
|
+
<PropertiesTable
|
|
65
|
+
content={[
|
|
66
|
+
{
|
|
67
|
+
name: 'execute',
|
|
68
|
+
type: '(options: { writer: UIMessageStreamWriter }) => Promise<void> | void',
|
|
69
|
+
description:
|
|
70
|
+
'A function that receives a writer instance and can use it to write UI message chunks to the stream.',
|
|
71
|
+
properties: [
|
|
72
|
+
{
|
|
73
|
+
type: 'UIMessageStreamWriter',
|
|
74
|
+
parameters: [
|
|
75
|
+
{
|
|
76
|
+
name: 'write',
|
|
77
|
+
type: '(part: UIMessageChunk) => void',
|
|
78
|
+
description: 'Writes a UI message chunk to the stream.',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'merge',
|
|
82
|
+
type: '(stream: ReadableStream<UIMessageChunk>) => void',
|
|
83
|
+
description:
|
|
84
|
+
'Merges the contents of another UI message stream into this stream.',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'onError',
|
|
88
|
+
type: '(error: unknown) => string',
|
|
89
|
+
description:
|
|
90
|
+
'Error handler that is used by the stream writer for handling errors in merged streams.',
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'onError',
|
|
98
|
+
type: '(error: unknown) => string',
|
|
99
|
+
description:
|
|
100
|
+
'A function that handles errors and returns an error message string. By default, it returns the error message.',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'originalMessages',
|
|
104
|
+
type: 'UIMessage[] | undefined',
|
|
105
|
+
description:
|
|
106
|
+
'The original messages. If provided, persistence mode is assumed and a message ID is provided for the response message.',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'onFinish',
|
|
110
|
+
type: '(options: { messages: UIMessage[]; isContinuation: boolean; isAborted: boolean; responseMessage: UIMessage; finishReason?: FinishReason }) => PromiseLike<void> | void',
|
|
111
|
+
description:
|
|
112
|
+
'A callback function that is called when the stream finishes.',
|
|
113
|
+
properties: [
|
|
114
|
+
{
|
|
115
|
+
type: 'FinishOptions',
|
|
116
|
+
parameters: [
|
|
117
|
+
{
|
|
118
|
+
name: 'messages',
|
|
119
|
+
type: 'UIMessage[]',
|
|
120
|
+
description: 'The updated list of UI messages.',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: 'isContinuation',
|
|
124
|
+
type: 'boolean',
|
|
125
|
+
description:
|
|
126
|
+
'Indicates whether the response message is a continuation of the last original message, or if a new message was created.',
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: 'isAborted',
|
|
130
|
+
type: 'boolean',
|
|
131
|
+
description: 'Indicates whether the stream was aborted.',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: 'responseMessage',
|
|
135
|
+
type: 'UIMessage',
|
|
136
|
+
description:
|
|
137
|
+
'The message that was sent to the client as a response (including the original message if it was extended).',
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: 'finishReason',
|
|
141
|
+
type: 'FinishReason | undefined',
|
|
142
|
+
description:
|
|
143
|
+
"The reason why the generation finished. One of: 'stop', 'length', 'content-filter', 'tool-calls', 'error', or 'other'.",
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: 'generateId',
|
|
151
|
+
type: 'IdGenerator | undefined',
|
|
152
|
+
description:
|
|
153
|
+
'A function to generate unique IDs for messages. Uses the default ID generator if not provided.',
|
|
154
|
+
},
|
|
155
|
+
]}
|
|
156
|
+
/>
|
|
157
|
+
|
|
158
|
+
### Returns
|
|
159
|
+
|
|
160
|
+
`ReadableStream<UIMessageChunk>`
|
|
161
|
+
|
|
162
|
+
A readable stream that emits UI message chunks. The stream automatically handles error propagation, merging of multiple streams, and proper cleanup when all operations are complete.
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: createUIMessageStreamResponse
|
|
3
|
+
description: API Reference for createUIMessageStreamResponse.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `createUIMessageStreamResponse`
|
|
7
|
+
|
|
8
|
+
The `createUIMessageStreamResponse` function creates a Response object that streams UI messages to the client.
|
|
9
|
+
|
|
10
|
+
## Import
|
|
11
|
+
|
|
12
|
+
<Snippet
|
|
13
|
+
text={`import { createUIMessageStreamResponse } from "ai"`}
|
|
14
|
+
prompt={false}
|
|
15
|
+
/>
|
|
16
|
+
|
|
17
|
+
## Example
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
import {
|
|
21
|
+
createUIMessageStream,
|
|
22
|
+
createUIMessageStreamResponse,
|
|
23
|
+
streamText,
|
|
24
|
+
} from 'ai';
|
|
25
|
+
__PROVIDER_IMPORT__;
|
|
26
|
+
|
|
27
|
+
const response = createUIMessageStreamResponse({
|
|
28
|
+
status: 200,
|
|
29
|
+
statusText: 'OK',
|
|
30
|
+
headers: {
|
|
31
|
+
'Custom-Header': 'value',
|
|
32
|
+
},
|
|
33
|
+
stream: createUIMessageStream({
|
|
34
|
+
execute({ writer }) {
|
|
35
|
+
// Write custom data (type must be 'data-<name>')
|
|
36
|
+
writer.write({
|
|
37
|
+
type: 'data-message',
|
|
38
|
+
data: { content: 'Hello' },
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Write text content using start/delta/end pattern
|
|
42
|
+
writer.write({
|
|
43
|
+
type: 'text-start',
|
|
44
|
+
id: 'greeting-text',
|
|
45
|
+
});
|
|
46
|
+
writer.write({
|
|
47
|
+
type: 'text-delta',
|
|
48
|
+
id: 'greeting-text',
|
|
49
|
+
delta: 'Hello, world!',
|
|
50
|
+
});
|
|
51
|
+
writer.write({
|
|
52
|
+
type: 'text-end',
|
|
53
|
+
id: 'greeting-text',
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// Write source information (flat properties, not nested)
|
|
57
|
+
writer.write({
|
|
58
|
+
type: 'source-url',
|
|
59
|
+
sourceId: 'source-1',
|
|
60
|
+
url: 'https://example.com',
|
|
61
|
+
title: 'Example Source',
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Merge with LLM stream
|
|
65
|
+
const result = streamText({
|
|
66
|
+
model: __MODEL__,
|
|
67
|
+
prompt: 'Say hello',
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
writer.merge(result.toUIMessageStream());
|
|
71
|
+
},
|
|
72
|
+
}),
|
|
73
|
+
});
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## API Signature
|
|
77
|
+
|
|
78
|
+
### Parameters
|
|
79
|
+
|
|
80
|
+
<PropertiesTable
|
|
81
|
+
content={[
|
|
82
|
+
{
|
|
83
|
+
name: 'stream',
|
|
84
|
+
type: 'ReadableStream<UIMessageChunk>',
|
|
85
|
+
description: 'The UI message stream to send to the client.',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'status',
|
|
89
|
+
type: 'number',
|
|
90
|
+
isOptional: true,
|
|
91
|
+
description: 'The status code for the response. Defaults to 200.',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: 'statusText',
|
|
95
|
+
type: 'string',
|
|
96
|
+
isOptional: true,
|
|
97
|
+
description: 'The status text for the response.',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'headers',
|
|
101
|
+
type: 'Headers | Record<string, string>',
|
|
102
|
+
isOptional: true,
|
|
103
|
+
description: 'Additional headers for the response.',
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: 'consumeSseStream',
|
|
107
|
+
type: '(options: { stream: ReadableStream<string> }) => PromiseLike<void> | void',
|
|
108
|
+
isOptional: true,
|
|
109
|
+
description:
|
|
110
|
+
'Optional callback to consume the Server-Sent Events stream.',
|
|
111
|
+
},
|
|
112
|
+
]}
|
|
113
|
+
/>
|
|
114
|
+
|
|
115
|
+
### Returns
|
|
116
|
+
|
|
117
|
+
`Response`
|
|
118
|
+
|
|
119
|
+
A Response object that streams UI message chunks with the specified status, headers, and content.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: pipeUIMessageStreamToResponse
|
|
3
|
+
description: Learn to use pipeUIMessageStreamToResponse helper function to pipe streaming data to a ServerResponse object.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `pipeUIMessageStreamToResponse`
|
|
7
|
+
|
|
8
|
+
The `pipeUIMessageStreamToResponse` function pipes streaming data to a Node.js ServerResponse object (see [Streaming Data](/docs/ai-sdk-ui/streaming-data)).
|
|
9
|
+
|
|
10
|
+
## Import
|
|
11
|
+
|
|
12
|
+
<Snippet
|
|
13
|
+
text={`import { pipeUIMessageStreamToResponse } from "ai"`}
|
|
14
|
+
prompt={false}
|
|
15
|
+
/>
|
|
16
|
+
|
|
17
|
+
## Example
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
pipeUIMessageStreamToResponse({
|
|
21
|
+
response: serverResponse,
|
|
22
|
+
status: 200,
|
|
23
|
+
statusText: 'OK',
|
|
24
|
+
headers: {
|
|
25
|
+
'Custom-Header': 'value',
|
|
26
|
+
},
|
|
27
|
+
stream: myUIMessageStream,
|
|
28
|
+
consumeSseStream: ({ stream }) => {
|
|
29
|
+
// Optional: consume the SSE stream independently
|
|
30
|
+
console.log('Consuming SSE stream:', stream);
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## API Signature
|
|
36
|
+
|
|
37
|
+
### Parameters
|
|
38
|
+
|
|
39
|
+
<PropertiesTable
|
|
40
|
+
content={[
|
|
41
|
+
{
|
|
42
|
+
name: 'response',
|
|
43
|
+
type: 'ServerResponse',
|
|
44
|
+
description: 'The Node.js ServerResponse object to pipe the data to.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'stream',
|
|
48
|
+
type: 'ReadableStream<UIMessageChunk>',
|
|
49
|
+
description: 'The UI message stream to pipe to the response.',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'status',
|
|
53
|
+
type: 'number',
|
|
54
|
+
isOptional: true,
|
|
55
|
+
description: 'The status code for the response.',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'statusText',
|
|
59
|
+
type: 'string',
|
|
60
|
+
isOptional: true,
|
|
61
|
+
description: 'The status text for the response.',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'headers',
|
|
65
|
+
type: 'Headers | Record<string, string>',
|
|
66
|
+
isOptional: true,
|
|
67
|
+
description: 'Additional headers for the response.',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'consumeSseStream',
|
|
71
|
+
type: '({ stream }: { stream: ReadableStream<string> }) => PromiseLike<void> | void',
|
|
72
|
+
isOptional: true,
|
|
73
|
+
description:
|
|
74
|
+
'Optional function to consume the SSE stream independently. The stream is teed and this function receives a copy.',
|
|
75
|
+
},
|
|
76
|
+
]}
|
|
77
|
+
/>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: readUIMessageStream
|
|
3
|
+
description: API Reference for readUIMessageStream.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# readUIMessageStream
|
|
7
|
+
|
|
8
|
+
Transforms a stream of `UIMessageChunk`s into an `AsyncIterableStream` of `UIMessage`s.
|
|
9
|
+
|
|
10
|
+
UI message streams are useful outside of Chat use cases, e.g. for terminal UIs, custom stream consumption on the client, or RSC (React Server Components).
|
|
11
|
+
|
|
12
|
+
## Import
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
import { readUIMessageStream } from 'ai';
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## API Signature
|
|
19
|
+
|
|
20
|
+
### Parameters
|
|
21
|
+
|
|
22
|
+
<PropertiesTable
|
|
23
|
+
content={[
|
|
24
|
+
{
|
|
25
|
+
name: 'message',
|
|
26
|
+
type: 'UIMessage',
|
|
27
|
+
isOptional: true,
|
|
28
|
+
description:
|
|
29
|
+
'The last assistant message to use as a starting point when the conversation is resumed. Otherwise undefined.',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'stream',
|
|
33
|
+
type: 'ReadableStream<UIMessageChunk>',
|
|
34
|
+
description: 'The stream of UIMessageChunk objects to read.',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'onError',
|
|
38
|
+
type: '(error: unknown) => void',
|
|
39
|
+
isOptional: true,
|
|
40
|
+
description:
|
|
41
|
+
'A function that is called when an error occurs during stream processing.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'terminateOnError',
|
|
45
|
+
type: 'boolean',
|
|
46
|
+
isOptional: true,
|
|
47
|
+
description:
|
|
48
|
+
'Whether to terminate the stream if an error occurs. Defaults to false.',
|
|
49
|
+
},
|
|
50
|
+
]}
|
|
51
|
+
/>
|
|
52
|
+
|
|
53
|
+
### Returns
|
|
54
|
+
|
|
55
|
+
An `AsyncIterableStream` of `UIMessage`s. Each stream part represents a different state of the same message as it is being completed.
|
|
56
|
+
|
|
57
|
+
For comprehensive examples and use cases, see [Reading UI Message Streams](/docs/ai-sdk-ui/reading-ui-message-streams).
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: InferUITools
|
|
3
|
+
description: API Reference for InferUITools.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# InferUITools
|
|
7
|
+
|
|
8
|
+
Infers the input and output types of a `ToolSet`.
|
|
9
|
+
|
|
10
|
+
This type helper is useful when working with tools in TypeScript to ensure type safety for your tool inputs and outputs in `UIMessage`s.
|
|
11
|
+
|
|
12
|
+
## Import
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
import { InferUITools } from 'ai';
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## API Signature
|
|
19
|
+
|
|
20
|
+
### Type Parameters
|
|
21
|
+
|
|
22
|
+
<PropertiesTable
|
|
23
|
+
content={[
|
|
24
|
+
{
|
|
25
|
+
name: 'TOOLS',
|
|
26
|
+
type: 'ToolSet',
|
|
27
|
+
description: 'The tool set to infer types from.',
|
|
28
|
+
},
|
|
29
|
+
]}
|
|
30
|
+
/>
|
|
31
|
+
|
|
32
|
+
### Returns
|
|
33
|
+
|
|
34
|
+
A type that maps each tool in the tool set to its inferred input and output types.
|
|
35
|
+
|
|
36
|
+
The resulting type has the shape:
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
{
|
|
40
|
+
[NAME in keyof TOOLS & string]: {
|
|
41
|
+
input: InferToolInput<TOOLS[NAME]>;
|
|
42
|
+
output: InferToolOutput<TOOLS[NAME]>;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Examples
|
|
48
|
+
|
|
49
|
+
### Basic Usage
|
|
50
|
+
|
|
51
|
+
```tsx
|
|
52
|
+
import { InferUITools } from 'ai';
|
|
53
|
+
import { z } from 'zod';
|
|
54
|
+
|
|
55
|
+
const tools = {
|
|
56
|
+
weather: {
|
|
57
|
+
description: 'Get the current weather',
|
|
58
|
+
inputSchema: z.object({
|
|
59
|
+
location: z.string().describe('The city and state'),
|
|
60
|
+
}),
|
|
61
|
+
execute: async ({ location }) => {
|
|
62
|
+
return `The weather in ${location} is sunny.`;
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
calculator: {
|
|
66
|
+
description: 'Perform basic arithmetic',
|
|
67
|
+
inputSchema: z.object({
|
|
68
|
+
operation: z.enum(['add', 'subtract', 'multiply', 'divide']),
|
|
69
|
+
a: z.number(),
|
|
70
|
+
b: z.number(),
|
|
71
|
+
}),
|
|
72
|
+
execute: async ({ operation, a, b }) => {
|
|
73
|
+
switch (operation) {
|
|
74
|
+
case 'add':
|
|
75
|
+
return a + b;
|
|
76
|
+
case 'subtract':
|
|
77
|
+
return a - b;
|
|
78
|
+
case 'multiply':
|
|
79
|
+
return a * b;
|
|
80
|
+
case 'divide':
|
|
81
|
+
return a / b;
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// Infer the types from the tool set
|
|
88
|
+
type MyUITools = InferUITools<typeof tools>;
|
|
89
|
+
// This creates a type with:
|
|
90
|
+
// {
|
|
91
|
+
// weather: { input: { location: string }; output: string };
|
|
92
|
+
// calculator: { input: { operation: 'add' | 'subtract' | 'multiply' | 'divide'; a: number; b: number }; output: number };
|
|
93
|
+
// }
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Related
|
|
97
|
+
|
|
98
|
+
- [`InferUITool`](/docs/reference/ai-sdk-ui/infer-ui-tool) - Infer types for a single tool
|
|
99
|
+
- [`useChat`](/docs/reference/ai-sdk-ui/use-chat) - Chat hook that supports typed tools
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: InferUITool
|
|
3
|
+
description: API Reference for InferUITool.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# InferUITool
|
|
7
|
+
|
|
8
|
+
Infers the input and output types of a tool.
|
|
9
|
+
|
|
10
|
+
This type helper is useful when working with individual tools to ensure type safety for your tool inputs and outputs in `UIMessage`s.
|
|
11
|
+
|
|
12
|
+
## Import
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
import { InferUITool } from 'ai';
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## API Signature
|
|
19
|
+
|
|
20
|
+
### Type Parameters
|
|
21
|
+
|
|
22
|
+
<PropertiesTable
|
|
23
|
+
content={[
|
|
24
|
+
{
|
|
25
|
+
name: 'TOOL',
|
|
26
|
+
type: 'Tool',
|
|
27
|
+
description: 'The tool to infer types from.',
|
|
28
|
+
},
|
|
29
|
+
]}
|
|
30
|
+
/>
|
|
31
|
+
|
|
32
|
+
### Returns
|
|
33
|
+
|
|
34
|
+
A type that contains the inferred input and output types of the tool.
|
|
35
|
+
|
|
36
|
+
The resulting type has the shape:
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
{
|
|
40
|
+
input: InferToolInput<TOOL>;
|
|
41
|
+
output: InferToolOutput<TOOL>;
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Examples
|
|
46
|
+
|
|
47
|
+
### Basic Usage
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
import { InferUITool } from 'ai';
|
|
51
|
+
import { z } from 'zod';
|
|
52
|
+
|
|
53
|
+
const weatherTool = {
|
|
54
|
+
description: 'Get the current weather',
|
|
55
|
+
inputSchema: z.object({
|
|
56
|
+
location: z.string().describe('The city and state'),
|
|
57
|
+
}),
|
|
58
|
+
execute: async ({ location }) => {
|
|
59
|
+
return `The weather in ${location} is sunny.`;
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// Infer the types from the tool
|
|
64
|
+
type WeatherUITool = InferUITool<typeof weatherTool>;
|
|
65
|
+
// This creates a type with:
|
|
66
|
+
// {
|
|
67
|
+
// input: { location: string };
|
|
68
|
+
// output: string;
|
|
69
|
+
// }
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Related
|
|
73
|
+
|
|
74
|
+
- [`InferUITools`](/docs/reference/ai-sdk-ui/infer-ui-tools) - Infer types for a tool set
|
|
75
|
+
- [`ToolUIPart`](/docs/reference/ai-sdk-core/ui-message#tooluipart) - Tool part type for UI messages
|