@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,144 @@
|
|
|
1
|
+
import { FlexibleSchema } from '@ai-sdk/provider-utils';
|
|
2
|
+
import { InvalidArgumentError } from '../error/invalid-argument-error';
|
|
3
|
+
|
|
4
|
+
export function validateObjectGenerationInput({
|
|
5
|
+
output,
|
|
6
|
+
schema,
|
|
7
|
+
schemaName,
|
|
8
|
+
schemaDescription,
|
|
9
|
+
enumValues,
|
|
10
|
+
}: {
|
|
11
|
+
output?: 'object' | 'array' | 'enum' | 'no-schema';
|
|
12
|
+
schema?: FlexibleSchema<unknown>;
|
|
13
|
+
schemaName?: string;
|
|
14
|
+
schemaDescription?: string;
|
|
15
|
+
enumValues?: Array<unknown>;
|
|
16
|
+
}) {
|
|
17
|
+
if (
|
|
18
|
+
output != null &&
|
|
19
|
+
output !== 'object' &&
|
|
20
|
+
output !== 'array' &&
|
|
21
|
+
output !== 'enum' &&
|
|
22
|
+
output !== 'no-schema'
|
|
23
|
+
) {
|
|
24
|
+
throw new InvalidArgumentError({
|
|
25
|
+
parameter: 'output',
|
|
26
|
+
value: output,
|
|
27
|
+
message: 'Invalid output type.',
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (output === 'no-schema') {
|
|
32
|
+
if (schema != null) {
|
|
33
|
+
throw new InvalidArgumentError({
|
|
34
|
+
parameter: 'schema',
|
|
35
|
+
value: schema,
|
|
36
|
+
message: 'Schema is not supported for no-schema output.',
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (schemaDescription != null) {
|
|
41
|
+
throw new InvalidArgumentError({
|
|
42
|
+
parameter: 'schemaDescription',
|
|
43
|
+
value: schemaDescription,
|
|
44
|
+
message: 'Schema description is not supported for no-schema output.',
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (schemaName != null) {
|
|
49
|
+
throw new InvalidArgumentError({
|
|
50
|
+
parameter: 'schemaName',
|
|
51
|
+
value: schemaName,
|
|
52
|
+
message: 'Schema name is not supported for no-schema output.',
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (enumValues != null) {
|
|
57
|
+
throw new InvalidArgumentError({
|
|
58
|
+
parameter: 'enumValues',
|
|
59
|
+
value: enumValues,
|
|
60
|
+
message: 'Enum values are not supported for no-schema output.',
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (output === 'object') {
|
|
66
|
+
if (schema == null) {
|
|
67
|
+
throw new InvalidArgumentError({
|
|
68
|
+
parameter: 'schema',
|
|
69
|
+
value: schema,
|
|
70
|
+
message: 'Schema is required for object output.',
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (enumValues != null) {
|
|
75
|
+
throw new InvalidArgumentError({
|
|
76
|
+
parameter: 'enumValues',
|
|
77
|
+
value: enumValues,
|
|
78
|
+
message: 'Enum values are not supported for object output.',
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (output === 'array') {
|
|
84
|
+
if (schema == null) {
|
|
85
|
+
throw new InvalidArgumentError({
|
|
86
|
+
parameter: 'schema',
|
|
87
|
+
value: schema,
|
|
88
|
+
message: 'Element schema is required for array output.',
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (enumValues != null) {
|
|
93
|
+
throw new InvalidArgumentError({
|
|
94
|
+
parameter: 'enumValues',
|
|
95
|
+
value: enumValues,
|
|
96
|
+
message: 'Enum values are not supported for array output.',
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (output === 'enum') {
|
|
102
|
+
if (schema != null) {
|
|
103
|
+
throw new InvalidArgumentError({
|
|
104
|
+
parameter: 'schema',
|
|
105
|
+
value: schema,
|
|
106
|
+
message: 'Schema is not supported for enum output.',
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (schemaDescription != null) {
|
|
111
|
+
throw new InvalidArgumentError({
|
|
112
|
+
parameter: 'schemaDescription',
|
|
113
|
+
value: schemaDescription,
|
|
114
|
+
message: 'Schema description is not supported for enum output.',
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (schemaName != null) {
|
|
119
|
+
throw new InvalidArgumentError({
|
|
120
|
+
parameter: 'schemaName',
|
|
121
|
+
value: schemaName,
|
|
122
|
+
message: 'Schema name is not supported for enum output.',
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (enumValues == null) {
|
|
127
|
+
throw new InvalidArgumentError({
|
|
128
|
+
parameter: 'enumValues',
|
|
129
|
+
value: enumValues,
|
|
130
|
+
message: 'Enum values are required for enum output.',
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
for (const value of enumValues) {
|
|
135
|
+
if (typeof value !== 'string') {
|
|
136
|
+
throw new InvalidArgumentError({
|
|
137
|
+
parameter: 'enumValues',
|
|
138
|
+
value,
|
|
139
|
+
message: 'Enum values must be strings.',
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { JSONObject } from '@ai-sdk/provider';
|
|
2
|
+
import { SpeechModelResponseMetadata } from '../types/speech-model-response-metadata';
|
|
3
|
+
import { Warning } from '../types/warning';
|
|
4
|
+
import { GeneratedAudioFile } from './generated-audio-file';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The result of a `generateSpeech` call.
|
|
8
|
+
* It contains the audio data and additional information.
|
|
9
|
+
*/
|
|
10
|
+
export interface SpeechResult {
|
|
11
|
+
/**
|
|
12
|
+
* The generated audio file with the audio data.
|
|
13
|
+
*/
|
|
14
|
+
readonly audio: GeneratedAudioFile;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Warnings for the call, e.g. unsupported settings.
|
|
18
|
+
*/
|
|
19
|
+
readonly warnings: Array<Warning>;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Response metadata from the provider. There may be multiple responses if we made multiple calls to the model.
|
|
23
|
+
*/
|
|
24
|
+
readonly responses: Array<SpeechModelResponseMetadata>;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Provider metadata from the provider.
|
|
28
|
+
*/
|
|
29
|
+
readonly providerMetadata: Record<string, JSONObject>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { JSONObject } from '@ai-sdk/provider';
|
|
2
|
+
import { ProviderOptions, withUserAgentSuffix } from '@ai-sdk/provider-utils';
|
|
3
|
+
import { NoSpeechGeneratedError } from '../error/no-speech-generated-error';
|
|
4
|
+
import { logWarnings } from '../logger/log-warnings';
|
|
5
|
+
import { resolveSpeechModel } from '../model/resolve-model';
|
|
6
|
+
import { SpeechModel } from '../types/speech-model';
|
|
7
|
+
import { SpeechModelResponseMetadata } from '../types/speech-model-response-metadata';
|
|
8
|
+
import { Warning } from '../types/warning';
|
|
9
|
+
import {
|
|
10
|
+
audioMediaTypeSignatures,
|
|
11
|
+
detectMediaType,
|
|
12
|
+
} from '../util/detect-media-type';
|
|
13
|
+
import { prepareRetries } from '../util/prepare-retries';
|
|
14
|
+
import { VERSION } from '../version';
|
|
15
|
+
import { SpeechResult } from './generate-speech-result';
|
|
16
|
+
import {
|
|
17
|
+
DefaultGeneratedAudioFile,
|
|
18
|
+
GeneratedAudioFile,
|
|
19
|
+
} from './generated-audio-file';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Generates speech audio using a speech model.
|
|
23
|
+
*
|
|
24
|
+
* @param model - The speech model to use.
|
|
25
|
+
* @param text - The text to convert to speech.
|
|
26
|
+
* @param voice - The voice to use for speech generation.
|
|
27
|
+
* @param outputFormat - The output format to use for speech generation e.g. "mp3", "wav", etc.
|
|
28
|
+
* @param instructions - Instructions for the speech generation e.g. "Speak in a slow and steady tone".
|
|
29
|
+
* @param speed - The speed of the speech generation.
|
|
30
|
+
* @param language - The language for speech generation (ISO 639-1 code e.g. "en", "es", "fr") or "auto" for automatic detection.
|
|
31
|
+
* @param providerOptions - Additional provider-specific options that are passed through to the provider
|
|
32
|
+
* as body parameters.
|
|
33
|
+
* @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.
|
|
34
|
+
* @param abortSignal - An optional abort signal that can be used to cancel the call.
|
|
35
|
+
* @param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.
|
|
36
|
+
*
|
|
37
|
+
* @returns A result object that contains the generated audio data.
|
|
38
|
+
*/
|
|
39
|
+
export async function generateSpeech({
|
|
40
|
+
model,
|
|
41
|
+
text,
|
|
42
|
+
voice,
|
|
43
|
+
outputFormat,
|
|
44
|
+
instructions,
|
|
45
|
+
speed,
|
|
46
|
+
language,
|
|
47
|
+
providerOptions = {},
|
|
48
|
+
maxRetries: maxRetriesArg,
|
|
49
|
+
abortSignal,
|
|
50
|
+
headers,
|
|
51
|
+
}: {
|
|
52
|
+
/**
|
|
53
|
+
* The speech model to use.
|
|
54
|
+
*/
|
|
55
|
+
model: SpeechModel;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The text to convert to speech.
|
|
59
|
+
*/
|
|
60
|
+
text: string;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The voice to use for speech generation.
|
|
64
|
+
*/
|
|
65
|
+
voice?: string;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The desired output format for the audio e.g. "mp3", "wav", etc.
|
|
69
|
+
*/
|
|
70
|
+
outputFormat?: 'mp3' | 'wav' | (string & {});
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Instructions for the speech generation e.g. "Speak in a slow and steady tone".
|
|
74
|
+
*/
|
|
75
|
+
instructions?: string;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The speed of the speech generation.
|
|
79
|
+
*/
|
|
80
|
+
speed?: number;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* The language for speech generation. This should be an ISO 639-1 language code (e.g. "en", "es", "fr")
|
|
84
|
+
* or "auto" for automatic language detection. Provider support varies.
|
|
85
|
+
*/
|
|
86
|
+
language?: string;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Additional provider-specific options that are passed through to the provider
|
|
90
|
+
* as body parameters.
|
|
91
|
+
*
|
|
92
|
+
* The outer record is keyed by the provider name, and the inner
|
|
93
|
+
* record is keyed by the provider-specific metadata key.
|
|
94
|
+
* ```ts
|
|
95
|
+
* {
|
|
96
|
+
* "openai": {}
|
|
97
|
+
* }
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
providerOptions?: ProviderOptions;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Maximum number of retries per speech model call. Set to 0 to disable retries.
|
|
104
|
+
*
|
|
105
|
+
* @default 2
|
|
106
|
+
*/
|
|
107
|
+
maxRetries?: number;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Abort signal.
|
|
111
|
+
*/
|
|
112
|
+
abortSignal?: AbortSignal;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Additional headers to include in the request.
|
|
116
|
+
* Only applicable for HTTP-based providers.
|
|
117
|
+
*/
|
|
118
|
+
headers?: Record<string, string>;
|
|
119
|
+
}): Promise<SpeechResult> {
|
|
120
|
+
const resolvedModel = resolveSpeechModel(model);
|
|
121
|
+
if (!resolvedModel) {
|
|
122
|
+
throw new Error('Model could not be resolved');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const headersWithUserAgent = withUserAgentSuffix(
|
|
126
|
+
headers ?? {},
|
|
127
|
+
`ai/${VERSION}`,
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
const { retry } = prepareRetries({
|
|
131
|
+
maxRetries: maxRetriesArg,
|
|
132
|
+
abortSignal,
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
const result = await retry(() =>
|
|
136
|
+
resolvedModel.doGenerate({
|
|
137
|
+
text,
|
|
138
|
+
voice,
|
|
139
|
+
outputFormat,
|
|
140
|
+
instructions,
|
|
141
|
+
speed,
|
|
142
|
+
language,
|
|
143
|
+
abortSignal,
|
|
144
|
+
headers: headersWithUserAgent,
|
|
145
|
+
providerOptions,
|
|
146
|
+
}),
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
if (!result.audio || result.audio.length === 0) {
|
|
150
|
+
throw new NoSpeechGeneratedError({ responses: [result.response] });
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
logWarnings({
|
|
154
|
+
warnings: result.warnings,
|
|
155
|
+
provider: resolvedModel.provider,
|
|
156
|
+
model: resolvedModel.modelId,
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
return new DefaultSpeechResult({
|
|
160
|
+
audio: new DefaultGeneratedAudioFile({
|
|
161
|
+
data: result.audio,
|
|
162
|
+
mediaType:
|
|
163
|
+
detectMediaType({
|
|
164
|
+
data: result.audio,
|
|
165
|
+
signatures: audioMediaTypeSignatures,
|
|
166
|
+
}) ?? 'audio/mp3',
|
|
167
|
+
}),
|
|
168
|
+
warnings: result.warnings,
|
|
169
|
+
responses: [result.response],
|
|
170
|
+
providerMetadata: result.providerMetadata,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
class DefaultSpeechResult implements SpeechResult {
|
|
175
|
+
readonly audio: GeneratedAudioFile;
|
|
176
|
+
readonly warnings: Array<Warning>;
|
|
177
|
+
readonly responses: Array<SpeechModelResponseMetadata>;
|
|
178
|
+
readonly providerMetadata: Record<string, JSONObject>;
|
|
179
|
+
|
|
180
|
+
constructor(options: {
|
|
181
|
+
audio: GeneratedAudioFile;
|
|
182
|
+
warnings: Array<Warning>;
|
|
183
|
+
responses: Array<SpeechModelResponseMetadata>;
|
|
184
|
+
providerMetadata: Record<string, JSONObject> | undefined;
|
|
185
|
+
}) {
|
|
186
|
+
this.audio = options.audio;
|
|
187
|
+
this.warnings = options.warnings;
|
|
188
|
+
this.responses = options.responses;
|
|
189
|
+
this.providerMetadata = options.providerMetadata ?? {};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import {
|
|
2
|
+
GeneratedFile,
|
|
3
|
+
DefaultGeneratedFile,
|
|
4
|
+
} from '../generate-text/generated-file';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A generated audio file.
|
|
8
|
+
*/
|
|
9
|
+
export interface GeneratedAudioFile extends GeneratedFile {
|
|
10
|
+
/**
|
|
11
|
+
* Audio format of the file (e.g., 'mp3', 'wav', etc.)
|
|
12
|
+
*/
|
|
13
|
+
readonly format: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export class DefaultGeneratedAudioFile
|
|
17
|
+
extends DefaultGeneratedFile
|
|
18
|
+
implements GeneratedAudioFile
|
|
19
|
+
{
|
|
20
|
+
readonly format: string;
|
|
21
|
+
|
|
22
|
+
constructor({
|
|
23
|
+
data,
|
|
24
|
+
mediaType,
|
|
25
|
+
}: {
|
|
26
|
+
data: string | Uint8Array;
|
|
27
|
+
mediaType: string;
|
|
28
|
+
}) {
|
|
29
|
+
super({ data, mediaType });
|
|
30
|
+
let format = 'mp3';
|
|
31
|
+
|
|
32
|
+
// If format is not provided, try to determine it from the media type
|
|
33
|
+
if (mediaType) {
|
|
34
|
+
const mediaTypeParts = mediaType.split('/');
|
|
35
|
+
|
|
36
|
+
if (mediaTypeParts.length === 2) {
|
|
37
|
+
// Handle special cases for audio formats
|
|
38
|
+
if (mediaType !== 'audio/mpeg') {
|
|
39
|
+
format = mediaTypeParts[1];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (!format) {
|
|
45
|
+
// TODO this should be an AI SDK error
|
|
46
|
+
throw new Error(
|
|
47
|
+
'Audio format must be provided or determinable from media type',
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
this.format = format;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export class DefaultGeneratedAudioFileWithType extends DefaultGeneratedAudioFile {
|
|
56
|
+
readonly type = 'audio';
|
|
57
|
+
|
|
58
|
+
constructor(options: {
|
|
59
|
+
data: string | Uint8Array;
|
|
60
|
+
mediaType: string;
|
|
61
|
+
format: string;
|
|
62
|
+
}) {
|
|
63
|
+
super(options);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ModelMessage,
|
|
3
|
+
ToolApprovalRequest,
|
|
4
|
+
ToolApprovalResponse,
|
|
5
|
+
} from '@ai-sdk/provider-utils';
|
|
6
|
+
import { InvalidToolApprovalError } from '../error/invalid-tool-approval-error';
|
|
7
|
+
import { ToolCallNotFoundForApprovalError } from '../error/tool-call-not-found-for-approval-error';
|
|
8
|
+
import { TypedToolCall } from './tool-call';
|
|
9
|
+
import { TypedToolResult } from './tool-result';
|
|
10
|
+
import { ToolSet } from './tool-set';
|
|
11
|
+
|
|
12
|
+
export type CollectedToolApprovals<TOOLS extends ToolSet> = {
|
|
13
|
+
approvalRequest: ToolApprovalRequest;
|
|
14
|
+
approvalResponse: ToolApprovalResponse;
|
|
15
|
+
toolCall: TypedToolCall<TOOLS>;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* If the last message is a tool message, this function collects all tool approvals
|
|
20
|
+
* from that message.
|
|
21
|
+
*/
|
|
22
|
+
export function collectToolApprovals<TOOLS extends ToolSet>({
|
|
23
|
+
messages,
|
|
24
|
+
}: {
|
|
25
|
+
messages: ModelMessage[];
|
|
26
|
+
}): {
|
|
27
|
+
approvedToolApprovals: Array<CollectedToolApprovals<TOOLS>>;
|
|
28
|
+
deniedToolApprovals: Array<CollectedToolApprovals<TOOLS>>;
|
|
29
|
+
} {
|
|
30
|
+
const lastMessage = messages.at(-1);
|
|
31
|
+
|
|
32
|
+
if (lastMessage?.role != 'tool') {
|
|
33
|
+
return {
|
|
34
|
+
approvedToolApprovals: [],
|
|
35
|
+
deniedToolApprovals: [],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// gather tool calls and prepare lookup
|
|
40
|
+
const toolCallsByToolCallId: Record<string, TypedToolCall<TOOLS>> = {};
|
|
41
|
+
for (const message of messages) {
|
|
42
|
+
if (message.role === 'assistant' && typeof message.content !== 'string') {
|
|
43
|
+
const content = message.content;
|
|
44
|
+
for (const part of content) {
|
|
45
|
+
if (part.type === 'tool-call') {
|
|
46
|
+
toolCallsByToolCallId[part.toolCallId] = part as TypedToolCall<TOOLS>;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// gather approval responses and prepare lookup
|
|
53
|
+
const toolApprovalRequestsByApprovalId: Record<string, ToolApprovalRequest> =
|
|
54
|
+
{};
|
|
55
|
+
for (const message of messages) {
|
|
56
|
+
if (message.role === 'assistant' && typeof message.content !== 'string') {
|
|
57
|
+
const content = message.content;
|
|
58
|
+
for (const part of content) {
|
|
59
|
+
if (part.type === 'tool-approval-request') {
|
|
60
|
+
toolApprovalRequestsByApprovalId[part.approvalId] = part;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// gather tool results from the last tool message
|
|
67
|
+
const toolResults: Record<string, TypedToolResult<TOOLS>> = {};
|
|
68
|
+
for (const part of lastMessage.content) {
|
|
69
|
+
if (part.type === 'tool-result') {
|
|
70
|
+
toolResults[part.toolCallId] = part as TypedToolResult<TOOLS>;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const approvedToolApprovals: Array<CollectedToolApprovals<TOOLS>> = [];
|
|
75
|
+
const deniedToolApprovals: Array<CollectedToolApprovals<TOOLS>> = [];
|
|
76
|
+
|
|
77
|
+
const approvalResponses = lastMessage.content.filter(
|
|
78
|
+
part => part.type === 'tool-approval-response',
|
|
79
|
+
);
|
|
80
|
+
for (const approvalResponse of approvalResponses) {
|
|
81
|
+
const approvalRequest =
|
|
82
|
+
toolApprovalRequestsByApprovalId[approvalResponse.approvalId];
|
|
83
|
+
|
|
84
|
+
if (approvalRequest == null) {
|
|
85
|
+
throw new InvalidToolApprovalError({
|
|
86
|
+
approvalId: approvalResponse.approvalId,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (toolResults[approvalRequest.toolCallId] != null) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const toolCall = toolCallsByToolCallId[approvalRequest.toolCallId];
|
|
95
|
+
if (toolCall == null) {
|
|
96
|
+
throw new ToolCallNotFoundForApprovalError({
|
|
97
|
+
toolCallId: approvalRequest.toolCallId,
|
|
98
|
+
approvalId: approvalRequest.approvalId,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const approval: CollectedToolApprovals<TOOLS> = {
|
|
103
|
+
approvalRequest,
|
|
104
|
+
approvalResponse,
|
|
105
|
+
toolCall,
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
if (approvalResponse.approved) {
|
|
109
|
+
approvedToolApprovals.push(approval);
|
|
110
|
+
} else {
|
|
111
|
+
deniedToolApprovals.push(approval);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return { approvedToolApprovals, deniedToolApprovals };
|
|
116
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ProviderMetadata } from '../types';
|
|
2
|
+
import { Source } from '../types/language-model';
|
|
3
|
+
import { GeneratedFile } from './generated-file';
|
|
4
|
+
import { ToolApprovalRequestOutput } from './tool-approval-request-output';
|
|
5
|
+
import { ReasoningOutput, ReasoningFileOutput } from './reasoning-output';
|
|
6
|
+
import { TypedToolCall } from './tool-call';
|
|
7
|
+
import { TypedToolError } from './tool-error';
|
|
8
|
+
import { TypedToolResult } from './tool-result';
|
|
9
|
+
import { ToolSet } from './tool-set';
|
|
10
|
+
|
|
11
|
+
export type ContentPart<TOOLS extends ToolSet> =
|
|
12
|
+
| { type: 'text'; text: string; providerMetadata?: ProviderMetadata }
|
|
13
|
+
| {
|
|
14
|
+
type: 'custom';
|
|
15
|
+
kind: `${string}.${string}`;
|
|
16
|
+
providerMetadata?: ProviderMetadata;
|
|
17
|
+
}
|
|
18
|
+
| ReasoningOutput
|
|
19
|
+
| ReasoningFileOutput
|
|
20
|
+
| ({ type: 'source' } & Source)
|
|
21
|
+
| { type: 'file'; file: GeneratedFile; providerMetadata?: ProviderMetadata }
|
|
22
|
+
| ({ type: 'tool-call' } & TypedToolCall<TOOLS> & {
|
|
23
|
+
providerMetadata?: ProviderMetadata;
|
|
24
|
+
})
|
|
25
|
+
| ({ type: 'tool-result' } & TypedToolResult<TOOLS> & {
|
|
26
|
+
providerMetadata?: ProviderMetadata;
|
|
27
|
+
})
|
|
28
|
+
| ({ type: 'tool-error' } & TypedToolError<TOOLS> & {
|
|
29
|
+
providerMetadata?: ProviderMetadata;
|
|
30
|
+
})
|
|
31
|
+
| ToolApprovalRequestOutput<TOOLS>;
|