@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,185 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: useCompletion
|
|
3
|
+
description: API reference for the useCompletion hook.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `useCompletion()`
|
|
7
|
+
|
|
8
|
+
Allows you to create text completion based capabilities for your application. It enables the streaming of text completions from your AI provider, manages the state for chat input, and updates the UI automatically as new messages are received.
|
|
9
|
+
|
|
10
|
+
## Import
|
|
11
|
+
|
|
12
|
+
<Tabs items={['React', 'Svelte', 'Vue', 'Angular']}>
|
|
13
|
+
<Tab>
|
|
14
|
+
<Snippet
|
|
15
|
+
text="import { useCompletion } from '@ai-sdk/react'"
|
|
16
|
+
dark
|
|
17
|
+
prompt={false}
|
|
18
|
+
/>
|
|
19
|
+
</Tab>
|
|
20
|
+
<Tab>
|
|
21
|
+
<Snippet
|
|
22
|
+
text="import { Completion } from '@ai-sdk/svelte'"
|
|
23
|
+
dark
|
|
24
|
+
prompt={false}
|
|
25
|
+
/>
|
|
26
|
+
</Tab>
|
|
27
|
+
<Tab>
|
|
28
|
+
<Snippet
|
|
29
|
+
text="import { useCompletion } from '@ai-sdk/vue'"
|
|
30
|
+
dark
|
|
31
|
+
prompt={false}
|
|
32
|
+
/>
|
|
33
|
+
</Tab>
|
|
34
|
+
<Tab>
|
|
35
|
+
<Snippet
|
|
36
|
+
text="import { Completion } from '@ai-sdk/angular'"
|
|
37
|
+
dark
|
|
38
|
+
prompt={false}
|
|
39
|
+
/>
|
|
40
|
+
</Tab>
|
|
41
|
+
</Tabs>
|
|
42
|
+
|
|
43
|
+
## API Signature
|
|
44
|
+
|
|
45
|
+
### Parameters
|
|
46
|
+
|
|
47
|
+
<PropertiesTable
|
|
48
|
+
content={[
|
|
49
|
+
{
|
|
50
|
+
name: 'api',
|
|
51
|
+
type: "string = '/api/completion'",
|
|
52
|
+
description:
|
|
53
|
+
'The API endpoint that is called to generate text. It can be a relative path (starting with `/`) or an absolute URL.',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'id',
|
|
57
|
+
type: 'string',
|
|
58
|
+
description:
|
|
59
|
+
'A unique identifier for the completion. If not provided, a random one will be generated. When provided, the `useCompletion` hook with the same `id` will have shared states across components. This is useful when you have multiple components showing the same chat stream',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'initialInput',
|
|
63
|
+
type: 'string',
|
|
64
|
+
description: 'An optional string for the initial prompt input.',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'initialCompletion',
|
|
68
|
+
type: 'string',
|
|
69
|
+
description: 'An optional string for the initial completion result.',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'onFinish',
|
|
73
|
+
type: '(prompt: string, completion: string) => void',
|
|
74
|
+
description:
|
|
75
|
+
'An optional callback function that is called when the completion stream ends.',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: 'onError',
|
|
79
|
+
type: '(error: Error) => void',
|
|
80
|
+
description:
|
|
81
|
+
'An optional callback that will be called when the chat stream encounters an error.',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'headers',
|
|
85
|
+
type: 'Record<string, string> | Headers',
|
|
86
|
+
description:
|
|
87
|
+
'An optional object of headers to be passed to the API endpoint.',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'body',
|
|
91
|
+
type: 'object',
|
|
92
|
+
description:
|
|
93
|
+
'An optional, additional body object to be passed to the API endpoint.',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'credentials',
|
|
97
|
+
type: "'omit' | 'same-origin' | 'include'",
|
|
98
|
+
description:
|
|
99
|
+
'An optional literal that sets the mode of credentials to be used on the request. Defaults to same-origin.',
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: 'streamProtocol',
|
|
103
|
+
type: "'text' | 'data'",
|
|
104
|
+
isOptional: true,
|
|
105
|
+
description:
|
|
106
|
+
'An optional literal that sets the type of stream to be used. Defaults to `data`. If set to `text`, the stream will be treated as a text stream.',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'fetch',
|
|
110
|
+
type: 'FetchFunction',
|
|
111
|
+
isOptional: true,
|
|
112
|
+
description:
|
|
113
|
+
'Optional. A custom fetch function to be used for the API call. Defaults to the global fetch function.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'experimental_throttle',
|
|
117
|
+
type: 'number',
|
|
118
|
+
isOptional: true,
|
|
119
|
+
description:
|
|
120
|
+
'React only. Custom throttle wait time in milliseconds for the completion and data updates. When specified, throttles how often the UI updates during streaming. Default is undefined, which disables throttling.',
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
]}
|
|
124
|
+
/>
|
|
125
|
+
|
|
126
|
+
### Returns
|
|
127
|
+
|
|
128
|
+
<PropertiesTable
|
|
129
|
+
content={[
|
|
130
|
+
{
|
|
131
|
+
name: 'completion',
|
|
132
|
+
type: 'string',
|
|
133
|
+
description: 'The current text completion.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: 'complete',
|
|
137
|
+
type: '(prompt: string, options?: { headers?: Record<string, string> | Headers, body?: object }) => Promise<string | null | undefined>',
|
|
138
|
+
description:
|
|
139
|
+
'Function to execute text completion based on the provided prompt. Returns the completion result when finished.',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'error',
|
|
143
|
+
type: 'undefined | Error',
|
|
144
|
+
description: 'The error thrown during the completion process, if any.',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: 'setCompletion',
|
|
148
|
+
type: '(completion: string) => void',
|
|
149
|
+
description: 'Function to update the `completion` state.',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
name: 'stop',
|
|
153
|
+
type: '() => void',
|
|
154
|
+
description: 'Function to abort the current API request.',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: 'input',
|
|
158
|
+
type: 'string',
|
|
159
|
+
description: 'The current value of the input field.',
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
name: 'setInput',
|
|
163
|
+
type: 'React.Dispatch<React.SetStateAction<string>>',
|
|
164
|
+
description: 'Function to update the input value.',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: 'handleInputChange',
|
|
168
|
+
type: '(event: any) => void',
|
|
169
|
+
description:
|
|
170
|
+
"Handler for the `onChange` event of the input field to control the input's value.",
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
name: 'handleSubmit',
|
|
174
|
+
type: '(event?: { preventDefault?: () => void }) => void',
|
|
175
|
+
description:
|
|
176
|
+
'Form submission handler that automatically resets the input field and appends a user message.',
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
name: 'isLoading',
|
|
180
|
+
type: 'boolean',
|
|
181
|
+
description:
|
|
182
|
+
'Boolean flag indicating whether a fetch operation is currently in progress.',
|
|
183
|
+
},
|
|
184
|
+
]}
|
|
185
|
+
/>
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: useObject
|
|
3
|
+
description: API reference for the useObject hook.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `experimental_useObject()`
|
|
7
|
+
|
|
8
|
+
<Note>
|
|
9
|
+
`useObject` is an experimental feature and only available in React, Svelte,
|
|
10
|
+
and Vue.
|
|
11
|
+
</Note>
|
|
12
|
+
|
|
13
|
+
Allows you to consume text streams that represent a JSON object and parse them into a complete object based on a schema.
|
|
14
|
+
You can use it together with [`streamText`](/docs/reference/ai-sdk-core/stream-text) and [`Output.object()`](/docs/reference/ai-sdk-core/output#output-object) in the backend.
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
'use client';
|
|
18
|
+
|
|
19
|
+
import { experimental_useObject as useObject } from '@ai-sdk/react';
|
|
20
|
+
|
|
21
|
+
export default function Page() {
|
|
22
|
+
const { object, submit } = useObject({
|
|
23
|
+
api: '/api/use-object',
|
|
24
|
+
schema: z.object({ content: z.string() }),
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<div>
|
|
29
|
+
<button onClick={() => submit('example input')}>Generate</button>
|
|
30
|
+
{object?.content && <p>{object.content}</p>}
|
|
31
|
+
</div>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Import
|
|
37
|
+
|
|
38
|
+
<Tabs items={['React', 'Svelte', 'Vue']}>
|
|
39
|
+
<Tab>
|
|
40
|
+
<Snippet
|
|
41
|
+
text="import { experimental_useObject as useObject } from '@ai-sdk/react'"
|
|
42
|
+
dark
|
|
43
|
+
prompt={false}
|
|
44
|
+
/>
|
|
45
|
+
</Tab>
|
|
46
|
+
<Tab>
|
|
47
|
+
<Snippet
|
|
48
|
+
text="import { Experimental_StructuredObject } from '@ai-sdk/svelte'"
|
|
49
|
+
dark
|
|
50
|
+
prompt={false}
|
|
51
|
+
/>
|
|
52
|
+
</Tab>
|
|
53
|
+
<Tab>
|
|
54
|
+
<Snippet
|
|
55
|
+
text="import { experimental_useObject } from '@ai-sdk/vue'"
|
|
56
|
+
dark
|
|
57
|
+
prompt={false}
|
|
58
|
+
/>
|
|
59
|
+
</Tab>
|
|
60
|
+
</Tabs>
|
|
61
|
+
|
|
62
|
+
## API Signature
|
|
63
|
+
|
|
64
|
+
### Parameters
|
|
65
|
+
|
|
66
|
+
<PropertiesTable
|
|
67
|
+
content={[
|
|
68
|
+
{
|
|
69
|
+
name: 'api',
|
|
70
|
+
type: 'string',
|
|
71
|
+
description:
|
|
72
|
+
'The API endpoint that is called to generate objects. It should stream JSON that matches the schema as chunked text. It can be a relative path (starting with `/`) or an absolute URL.',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: 'schema',
|
|
76
|
+
type: 'Zod Schema | JSON Schema',
|
|
77
|
+
description:
|
|
78
|
+
'A schema that defines the shape of the complete object. You can either pass in a Zod schema or a JSON schema (using the `jsonSchema` function).',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'id?',
|
|
82
|
+
type: 'string',
|
|
83
|
+
description:
|
|
84
|
+
'A unique identifier. If not provided, a random one will be generated. When provided, the `useObject` hook with the same `id` will have shared states across components.',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'initialValue',
|
|
88
|
+
type: 'DeepPartial<RESULT> | undefined',
|
|
89
|
+
isOptional: true,
|
|
90
|
+
description: 'An value for the initial object. Optional.',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: 'fetch',
|
|
94
|
+
type: 'FetchFunction',
|
|
95
|
+
isOptional: true,
|
|
96
|
+
description:
|
|
97
|
+
'A custom fetch function to be used for the API call. Defaults to the global fetch function. Optional.',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'headers',
|
|
101
|
+
type: 'Record<string, string> | Headers',
|
|
102
|
+
isOptional: true,
|
|
103
|
+
description:
|
|
104
|
+
'A headers object to be passed to the API endpoint. Optional.',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'credentials',
|
|
108
|
+
type: 'RequestCredentials',
|
|
109
|
+
isOptional: true,
|
|
110
|
+
description:
|
|
111
|
+
'The credentials mode to be used for the fetch request. Possible values are: "omit", "same-origin", "include". Optional.',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: 'onError',
|
|
115
|
+
type: '(error: Error) => void',
|
|
116
|
+
isOptional: true,
|
|
117
|
+
description:
|
|
118
|
+
'Callback function to be called when an error is encountered. Optional.',
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: 'onFinish',
|
|
122
|
+
type: '(result: OnFinishResult) => void',
|
|
123
|
+
isOptional: true,
|
|
124
|
+
description: 'Called when the streaming response has finished.',
|
|
125
|
+
properties: [
|
|
126
|
+
{
|
|
127
|
+
type: 'OnFinishResult',
|
|
128
|
+
parameters: [
|
|
129
|
+
{
|
|
130
|
+
name: 'object',
|
|
131
|
+
type: 'T | undefined',
|
|
132
|
+
description:
|
|
133
|
+
'The generated object (typed according to the schema). Can be undefined if the final object does not match the schema.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: 'error',
|
|
137
|
+
type: 'Error | undefined',
|
|
138
|
+
description:
|
|
139
|
+
'Optional error object. This is e.g. a TypeValidationError when the final object does not match the schema.',
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
},
|
|
145
|
+
]}
|
|
146
|
+
/>
|
|
147
|
+
|
|
148
|
+
### Returns
|
|
149
|
+
|
|
150
|
+
<PropertiesTable
|
|
151
|
+
content={[
|
|
152
|
+
{
|
|
153
|
+
name: 'submit',
|
|
154
|
+
type: '(input: INPUT) => void',
|
|
155
|
+
description: 'Calls the API with the provided input as JSON body.',
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: 'object',
|
|
159
|
+
type: 'DeepPartial<RESULT> | undefined',
|
|
160
|
+
description:
|
|
161
|
+
'The current value for the generated object. Updated as the API streams JSON chunks.',
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
name: 'error',
|
|
165
|
+
type: 'Error | undefined',
|
|
166
|
+
description: 'The error object if the API call fails.',
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
name: 'isLoading',
|
|
170
|
+
type: 'boolean',
|
|
171
|
+
description:
|
|
172
|
+
'Boolean flag indicating whether a request is currently in progress.',
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
name: 'stop',
|
|
176
|
+
type: '() => void',
|
|
177
|
+
description: 'Function to abort the current API request.',
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
name: 'clear',
|
|
181
|
+
type: '() => void',
|
|
182
|
+
description: 'Function to clear the object state.',
|
|
183
|
+
},
|
|
184
|
+
]}
|
|
185
|
+
/>
|
|
186
|
+
|
|
187
|
+
## Examples
|
|
188
|
+
|
|
189
|
+
<ExampleLinks
|
|
190
|
+
examples={[
|
|
191
|
+
{
|
|
192
|
+
title: 'Streaming Object Generation with useObject',
|
|
193
|
+
link: '/examples/next-pages/basics/streaming-object-generation',
|
|
194
|
+
},
|
|
195
|
+
]}
|
|
196
|
+
/>
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: convertToModelMessages
|
|
3
|
+
description: Convert useChat messages to ModelMessages for AI functions (API Reference)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `convertToModelMessages()`
|
|
7
|
+
|
|
8
|
+
The `convertToModelMessages` function is used to transform an array of UI messages from the `useChat` hook into an array of `ModelMessage` objects. These `ModelMessage` objects are compatible with AI core functions like `streamText`.
|
|
9
|
+
|
|
10
|
+
```ts filename="app/api/chat/route.ts"
|
|
11
|
+
import { convertToModelMessages, streamText } from 'ai';
|
|
12
|
+
__PROVIDER_IMPORT__;
|
|
13
|
+
|
|
14
|
+
export async function POST(req: Request) {
|
|
15
|
+
const { messages } = await req.json();
|
|
16
|
+
|
|
17
|
+
const result = streamText({
|
|
18
|
+
model: __MODEL__,
|
|
19
|
+
messages: await convertToModelMessages(messages),
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
return result.toUIMessageStreamResponse();
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Import
|
|
27
|
+
|
|
28
|
+
<Snippet text={`import { convertToModelMessages } from "ai"`} prompt={false} />
|
|
29
|
+
|
|
30
|
+
## API Signature
|
|
31
|
+
|
|
32
|
+
### Parameters
|
|
33
|
+
|
|
34
|
+
<PropertiesTable
|
|
35
|
+
content={[
|
|
36
|
+
{
|
|
37
|
+
name: 'messages',
|
|
38
|
+
type: 'Message[]',
|
|
39
|
+
description:
|
|
40
|
+
'An array of UI messages from the useChat hook to be converted',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'options',
|
|
44
|
+
type: '{ tools?: ToolSet, ignoreIncompleteToolCalls?: boolean, convertDataPart?: (part: DataUIPart) => TextPart | FilePart | undefined }',
|
|
45
|
+
description:
|
|
46
|
+
'Optional configuration object. Provide tools to enable multi-modal tool responses. Set ignoreIncompleteToolCalls to true to skip tool calls without results (default: false). Use convertDataPart to transform custom data parts into model-compatible content.',
|
|
47
|
+
},
|
|
48
|
+
]}
|
|
49
|
+
/>
|
|
50
|
+
|
|
51
|
+
### Returns
|
|
52
|
+
|
|
53
|
+
A Promise that resolves to an array of [`ModelMessage`](/docs/reference/ai-sdk-core/model-message) objects.
|
|
54
|
+
|
|
55
|
+
<PropertiesTable
|
|
56
|
+
content={[
|
|
57
|
+
{
|
|
58
|
+
name: 'Promise<ModelMessage[]>',
|
|
59
|
+
type: 'Promise',
|
|
60
|
+
description:
|
|
61
|
+
'A Promise that resolves to an array of ModelMessage objects',
|
|
62
|
+
},
|
|
63
|
+
]}
|
|
64
|
+
/>
|
|
65
|
+
|
|
66
|
+
## Multi-modal Tool Responses
|
|
67
|
+
|
|
68
|
+
The `convertToModelMessages` function supports tools that can return multi-modal content. This is useful when tools need to return non-text content like images.
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
import { tool } from 'ai';
|
|
72
|
+
__PROVIDER_IMPORT__;
|
|
73
|
+
import { z } from 'zod';
|
|
74
|
+
|
|
75
|
+
const screenshotTool = tool({
|
|
76
|
+
inputSchema: z.object({}),
|
|
77
|
+
execute: async () => 'imgbase64',
|
|
78
|
+
toModelOutput: ({ output }) => [{ type: 'image', data: output }],
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
const result = streamText({
|
|
82
|
+
model: __MODEL__,
|
|
83
|
+
messages: convertToModelMessages(messages, {
|
|
84
|
+
tools: {
|
|
85
|
+
screenshot: screenshotTool,
|
|
86
|
+
},
|
|
87
|
+
}),
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Tools can implement the optional `toModelOutput` method to transform their results into multi-modal content. The content is an array of content parts, where each part has a `type` (e.g., 'text', 'image') and corresponding data.
|
|
92
|
+
|
|
93
|
+
## Custom Data Part Conversion
|
|
94
|
+
|
|
95
|
+
The `convertToModelMessages` function supports converting custom data parts attached to user messages. This is useful when users need to include additional context (URLs, code files, JSON configs) with their messages.
|
|
96
|
+
|
|
97
|
+
### Basic Usage
|
|
98
|
+
|
|
99
|
+
By default, data parts in user messages are filtered out during conversion. To include them, provide a `convertDataPart` callback that transforms data parts into text or file parts that the model can understand:
|
|
100
|
+
|
|
101
|
+
```ts filename="app/api/chat/route.ts"
|
|
102
|
+
import { convertToModelMessages, streamText } from 'ai';
|
|
103
|
+
|
|
104
|
+
type CustomUIMessage = UIMessage<
|
|
105
|
+
never,
|
|
106
|
+
{
|
|
107
|
+
url: { url: string; title: string; content: string };
|
|
108
|
+
'code-file': { filename: string; code: string; language: string };
|
|
109
|
+
}
|
|
110
|
+
>;
|
|
111
|
+
|
|
112
|
+
export async function POST(req: Request) {
|
|
113
|
+
const { messages } = await req.json();
|
|
114
|
+
|
|
115
|
+
const result = streamText({
|
|
116
|
+
model: __MODEL__,
|
|
117
|
+
messages: convertToModelMessages<CustomUIMessage>(messages, {
|
|
118
|
+
convertDataPart: part => {
|
|
119
|
+
// Convert URL attachments to text
|
|
120
|
+
if (part.type === 'data-url') {
|
|
121
|
+
return {
|
|
122
|
+
type: 'text',
|
|
123
|
+
text: `[Reference: ${part.data.title}](${part.data.url})\n\n${part.data.content}`,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Convert code file attachments
|
|
128
|
+
if (part.type === 'data-code-file') {
|
|
129
|
+
return {
|
|
130
|
+
type: 'text',
|
|
131
|
+
text: `\`\`\`${part.data.language}\n// ${part.data.filename}\n${part.data.code}\n\`\`\``,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Other data parts are ignored
|
|
136
|
+
},
|
|
137
|
+
}),
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
return result.toUIMessageStreamResponse();
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Use Cases
|
|
145
|
+
|
|
146
|
+
**Attaching URL Content**
|
|
147
|
+
Allow users to attach URLs to their messages, with the content fetched and formatted for the model:
|
|
148
|
+
|
|
149
|
+
```ts
|
|
150
|
+
// Client side
|
|
151
|
+
sendMessage({
|
|
152
|
+
parts: [
|
|
153
|
+
{ type: 'text', text: 'Analyze this article' },
|
|
154
|
+
{
|
|
155
|
+
type: 'data-url',
|
|
156
|
+
data: {
|
|
157
|
+
url: 'https://example.com/article',
|
|
158
|
+
title: 'Important Article',
|
|
159
|
+
content: '...',
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**Including Code Files as Context**
|
|
167
|
+
Let users reference code files in their conversations:
|
|
168
|
+
|
|
169
|
+
```ts
|
|
170
|
+
convertDataPart: part => {
|
|
171
|
+
if (part.type === 'data-code-file') {
|
|
172
|
+
return {
|
|
173
|
+
type: 'text',
|
|
174
|
+
text: `\`\`\`${part.data.language}\n${part.data.code}\n\`\`\``,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Selective Inclusion**
|
|
181
|
+
Only data parts for which you return a text or file model message part are included,
|
|
182
|
+
all other data parts are ignored.
|
|
183
|
+
|
|
184
|
+
```ts
|
|
185
|
+
const result = convertToModelMessages<
|
|
186
|
+
UIMessage<
|
|
187
|
+
unknown,
|
|
188
|
+
{
|
|
189
|
+
url: { url: string; title: string };
|
|
190
|
+
code: { code: string; language: string };
|
|
191
|
+
note: { text: string };
|
|
192
|
+
}
|
|
193
|
+
>
|
|
194
|
+
>(messages, {
|
|
195
|
+
convertDataPart: part => {
|
|
196
|
+
if (part.type === 'data-url') {
|
|
197
|
+
return {
|
|
198
|
+
type: 'text',
|
|
199
|
+
text: `[${part.data.title}](${part.data.url})`,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// data-code and data-node are ignored
|
|
204
|
+
},
|
|
205
|
+
});
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Type Safety
|
|
209
|
+
|
|
210
|
+
The generic parameter ensures full type safety for your custom data parts:
|
|
211
|
+
|
|
212
|
+
```ts
|
|
213
|
+
type MyUIMessage = UIMessage<
|
|
214
|
+
unknown,
|
|
215
|
+
{
|
|
216
|
+
url: { url: string; content: string };
|
|
217
|
+
config: { key: string; value: string };
|
|
218
|
+
}
|
|
219
|
+
>;
|
|
220
|
+
|
|
221
|
+
// TypeScript knows the exact shape of part.data
|
|
222
|
+
convertToModelMessages<MyUIMessage>(messages, {
|
|
223
|
+
convertDataPart: part => {
|
|
224
|
+
if (part.type === 'data-url') {
|
|
225
|
+
// part.data is typed as { url: string; content: string }
|
|
226
|
+
return { type: 'text', text: part.data.url };
|
|
227
|
+
}
|
|
228
|
+
// Return undefined to skip this part
|
|
229
|
+
},
|
|
230
|
+
});
|
|
231
|
+
```
|