@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,402 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
Experimental_VideoModelV4,
|
|
3
|
+
Experimental_VideoModelV4CallOptions,
|
|
4
|
+
Experimental_VideoModelV4File,
|
|
5
|
+
SharedV4ProviderMetadata,
|
|
6
|
+
} from '@ai-sdk/provider';
|
|
7
|
+
import {
|
|
8
|
+
convertBase64ToUint8Array,
|
|
9
|
+
type DataContent,
|
|
10
|
+
type ProviderOptions,
|
|
11
|
+
withUserAgentSuffix,
|
|
12
|
+
} from '@ai-sdk/provider-utils';
|
|
13
|
+
import { NoVideoGeneratedError } from '../error/no-video-generated-error';
|
|
14
|
+
import {
|
|
15
|
+
DefaultGeneratedFile,
|
|
16
|
+
type GeneratedFile,
|
|
17
|
+
} from '../generate-text/generated-file';
|
|
18
|
+
import { logWarnings } from '../logger/log-warnings';
|
|
19
|
+
import { resolveVideoModel } from '../model/resolve-model';
|
|
20
|
+
import type { VideoModel } from '../types/video-model';
|
|
21
|
+
import type { VideoModelResponseMetadata } from '../types/video-model-response-metadata';
|
|
22
|
+
import type { Warning } from '../types/warning';
|
|
23
|
+
import {
|
|
24
|
+
detectMediaType,
|
|
25
|
+
imageMediaTypeSignatures,
|
|
26
|
+
videoMediaTypeSignatures,
|
|
27
|
+
} from '../util/detect-media-type';
|
|
28
|
+
import { createDownload } from '../util/download/create-download';
|
|
29
|
+
import { prepareRetries } from '../util/prepare-retries';
|
|
30
|
+
import { VERSION } from '../version';
|
|
31
|
+
import type { GenerateVideoResult } from './generate-video-result';
|
|
32
|
+
import { splitDataUrl } from '../prompt/split-data-url';
|
|
33
|
+
|
|
34
|
+
export type GenerateVideoPrompt =
|
|
35
|
+
| string
|
|
36
|
+
| {
|
|
37
|
+
image: DataContent;
|
|
38
|
+
text?: string;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Generates videos using a video model.
|
|
43
|
+
*
|
|
44
|
+
* @param model - The video model to use.
|
|
45
|
+
* @param prompt - The prompt that should be used to generate the video.
|
|
46
|
+
* @param n - Number of videos to generate. Default: 1.
|
|
47
|
+
* @param aspectRatio - Aspect ratio of the videos to generate. Must have the format `{width}:{height}`.
|
|
48
|
+
* @param resolution - Resolution of the videos to generate. Must have the format `{width}x{height}`.
|
|
49
|
+
* @param duration - Duration of the video in seconds.
|
|
50
|
+
* @param fps - Frames per second for the video.
|
|
51
|
+
* @param seed - Seed for the video generation.
|
|
52
|
+
* @param providerOptions - Additional provider-specific options that are passed through to the provider
|
|
53
|
+
* as body parameters.
|
|
54
|
+
* @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.
|
|
55
|
+
* @param abortSignal - An optional abort signal that can be used to cancel the call.
|
|
56
|
+
* @param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.
|
|
57
|
+
*
|
|
58
|
+
* @returns A result object that contains the generated videos.
|
|
59
|
+
*/
|
|
60
|
+
const defaultDownload = createDownload();
|
|
61
|
+
|
|
62
|
+
export async function experimental_generateVideo({
|
|
63
|
+
model: modelArg,
|
|
64
|
+
prompt: promptArg,
|
|
65
|
+
n = 1,
|
|
66
|
+
maxVideosPerCall,
|
|
67
|
+
aspectRatio,
|
|
68
|
+
resolution,
|
|
69
|
+
duration,
|
|
70
|
+
fps,
|
|
71
|
+
seed,
|
|
72
|
+
providerOptions,
|
|
73
|
+
maxRetries: maxRetriesArg,
|
|
74
|
+
abortSignal,
|
|
75
|
+
headers,
|
|
76
|
+
download: downloadFn = defaultDownload,
|
|
77
|
+
}: {
|
|
78
|
+
/**
|
|
79
|
+
* The video model to use.
|
|
80
|
+
*/
|
|
81
|
+
model: VideoModel;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* The prompt that should be used to generate the video.
|
|
85
|
+
*/
|
|
86
|
+
prompt: GenerateVideoPrompt;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Number of videos to generate.
|
|
90
|
+
*/
|
|
91
|
+
n?: number;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Maximum number of videos per API call. If not provided, the model's default will be used.
|
|
95
|
+
*/
|
|
96
|
+
maxVideosPerCall?: number;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Aspect ratio of the videos to generate. Must have the format `{width}:{height}`.
|
|
100
|
+
*/
|
|
101
|
+
aspectRatio?: `${number}:${number}`;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Resolution of the videos to generate. Must have the format `{width}x{height}`.
|
|
105
|
+
*/
|
|
106
|
+
resolution?: `${number}x${number}`;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Duration of the video in seconds.
|
|
110
|
+
*/
|
|
111
|
+
duration?: number;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Frames per second for the video.
|
|
115
|
+
*/
|
|
116
|
+
fps?: number;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Seed for the video generation.
|
|
120
|
+
*/
|
|
121
|
+
seed?: number;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Additional provider-specific options that are passed through to the provider
|
|
125
|
+
* as body parameters.
|
|
126
|
+
*/
|
|
127
|
+
providerOptions?: ProviderOptions;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Maximum number of retries per video model call. Set to 0 to disable retries.
|
|
131
|
+
*
|
|
132
|
+
* @default 2
|
|
133
|
+
*/
|
|
134
|
+
maxRetries?: number;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Abort signal.
|
|
138
|
+
*/
|
|
139
|
+
abortSignal?: AbortSignal;
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Additional headers to include in the request.
|
|
143
|
+
* Only applicable for HTTP-based providers.
|
|
144
|
+
*/
|
|
145
|
+
headers?: Record<string, string>;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Custom download function for fetching videos from URLs.
|
|
149
|
+
* Use `createDownload()` from `ai` to create a download function with custom size limits.
|
|
150
|
+
*
|
|
151
|
+
* @default createDownload() (2 GiB limit)
|
|
152
|
+
*/
|
|
153
|
+
download?: (options: {
|
|
154
|
+
url: URL;
|
|
155
|
+
abortSignal?: AbortSignal;
|
|
156
|
+
}) => Promise<{ data: Uint8Array; mediaType: string | undefined }>;
|
|
157
|
+
}): Promise<GenerateVideoResult> {
|
|
158
|
+
const model = resolveVideoModel(modelArg);
|
|
159
|
+
|
|
160
|
+
const headersWithUserAgent = withUserAgentSuffix(
|
|
161
|
+
headers ?? {},
|
|
162
|
+
`ai/${VERSION}`,
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
const { retry } = prepareRetries({
|
|
166
|
+
maxRetries: maxRetriesArg,
|
|
167
|
+
abortSignal,
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
const { prompt, image } = normalizePrompt(promptArg);
|
|
171
|
+
|
|
172
|
+
const maxVideosPerCallWithDefault =
|
|
173
|
+
maxVideosPerCall ?? (await invokeModelMaxVideosPerCall(model)) ?? 1;
|
|
174
|
+
|
|
175
|
+
// parallelize calls to the model:
|
|
176
|
+
const callCount = Math.ceil(n / maxVideosPerCallWithDefault);
|
|
177
|
+
const callVideoCounts = Array.from({ length: callCount }, (_, index) => {
|
|
178
|
+
const remaining = n - index * maxVideosPerCallWithDefault;
|
|
179
|
+
return Math.min(remaining, maxVideosPerCallWithDefault);
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
const results = await Promise.all(
|
|
183
|
+
callVideoCounts.map(async callVideoCount =>
|
|
184
|
+
retry(() =>
|
|
185
|
+
model.doGenerate({
|
|
186
|
+
prompt,
|
|
187
|
+
n: callVideoCount,
|
|
188
|
+
aspectRatio,
|
|
189
|
+
resolution,
|
|
190
|
+
duration,
|
|
191
|
+
fps,
|
|
192
|
+
seed,
|
|
193
|
+
image,
|
|
194
|
+
providerOptions: providerOptions ?? {},
|
|
195
|
+
headers: headersWithUserAgent,
|
|
196
|
+
abortSignal,
|
|
197
|
+
} satisfies Experimental_VideoModelV4CallOptions),
|
|
198
|
+
),
|
|
199
|
+
),
|
|
200
|
+
);
|
|
201
|
+
|
|
202
|
+
// collect result videos, warnings, and response metadata
|
|
203
|
+
const videos: Array<GeneratedFile> = [];
|
|
204
|
+
const warnings: Array<Warning> = [];
|
|
205
|
+
const responses: Array<VideoModelResponseMetadata> = [];
|
|
206
|
+
const providerMetadata: SharedV4ProviderMetadata = {};
|
|
207
|
+
|
|
208
|
+
for (const result of results) {
|
|
209
|
+
for (const videoData of result.videos) {
|
|
210
|
+
switch (videoData.type) {
|
|
211
|
+
case 'url': {
|
|
212
|
+
const { data, mediaType: downloadedMediaType } = await downloadFn({
|
|
213
|
+
url: new URL(videoData.url),
|
|
214
|
+
abortSignal,
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
// Filter out generic/unknown media types that should fall through to detection
|
|
218
|
+
const isUsableMediaType = (type: string | undefined): boolean =>
|
|
219
|
+
!!type && type !== 'application/octet-stream';
|
|
220
|
+
|
|
221
|
+
const mediaType =
|
|
222
|
+
(isUsableMediaType(videoData.mediaType) && videoData.mediaType) ||
|
|
223
|
+
(isUsableMediaType(downloadedMediaType) && downloadedMediaType) ||
|
|
224
|
+
detectMediaType({
|
|
225
|
+
data,
|
|
226
|
+
signatures: videoMediaTypeSignatures,
|
|
227
|
+
}) ||
|
|
228
|
+
'video/mp4';
|
|
229
|
+
|
|
230
|
+
videos.push(
|
|
231
|
+
new DefaultGeneratedFile({
|
|
232
|
+
data,
|
|
233
|
+
mediaType,
|
|
234
|
+
}),
|
|
235
|
+
);
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
case 'base64': {
|
|
240
|
+
videos.push(
|
|
241
|
+
new DefaultGeneratedFile({
|
|
242
|
+
data: videoData.data,
|
|
243
|
+
mediaType: videoData.mediaType || 'video/mp4',
|
|
244
|
+
}),
|
|
245
|
+
);
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
case 'binary': {
|
|
250
|
+
const mediaType =
|
|
251
|
+
videoData.mediaType ||
|
|
252
|
+
detectMediaType({
|
|
253
|
+
data: videoData.data,
|
|
254
|
+
signatures: videoMediaTypeSignatures,
|
|
255
|
+
}) ||
|
|
256
|
+
'video/mp4';
|
|
257
|
+
|
|
258
|
+
videos.push(
|
|
259
|
+
new DefaultGeneratedFile({
|
|
260
|
+
data: videoData.data,
|
|
261
|
+
mediaType,
|
|
262
|
+
}),
|
|
263
|
+
);
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
warnings.push(...result.warnings);
|
|
270
|
+
|
|
271
|
+
responses.push({
|
|
272
|
+
timestamp: result.response.timestamp,
|
|
273
|
+
modelId: result.response.modelId,
|
|
274
|
+
headers: result.response.headers,
|
|
275
|
+
providerMetadata: result.providerMetadata,
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
if (result.providerMetadata != null) {
|
|
279
|
+
for (const [providerName, metadata] of Object.entries(
|
|
280
|
+
result.providerMetadata,
|
|
281
|
+
)) {
|
|
282
|
+
const existingMetadata = providerMetadata[providerName];
|
|
283
|
+
if (existingMetadata != null && typeof existingMetadata === 'object') {
|
|
284
|
+
providerMetadata[providerName] = {
|
|
285
|
+
...existingMetadata,
|
|
286
|
+
...metadata,
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
// Merge videos arrays if both exist
|
|
290
|
+
if (
|
|
291
|
+
'videos' in existingMetadata &&
|
|
292
|
+
Array.isArray(existingMetadata.videos) &&
|
|
293
|
+
'videos' in metadata &&
|
|
294
|
+
Array.isArray(metadata.videos)
|
|
295
|
+
) {
|
|
296
|
+
(providerMetadata[providerName] as { videos: unknown[] }).videos = [
|
|
297
|
+
...existingMetadata.videos,
|
|
298
|
+
...metadata.videos,
|
|
299
|
+
];
|
|
300
|
+
}
|
|
301
|
+
} else {
|
|
302
|
+
providerMetadata[providerName] = metadata;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
if (videos.length === 0) {
|
|
309
|
+
throw new NoVideoGeneratedError({ responses });
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (warnings.length > 0) {
|
|
313
|
+
logWarnings({
|
|
314
|
+
warnings,
|
|
315
|
+
provider: model.provider,
|
|
316
|
+
model: model.modelId,
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
return {
|
|
321
|
+
video: videos[0],
|
|
322
|
+
videos,
|
|
323
|
+
warnings,
|
|
324
|
+
responses,
|
|
325
|
+
providerMetadata,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
function normalizePrompt(promptArg: GenerateVideoPrompt): {
|
|
330
|
+
prompt: string | undefined;
|
|
331
|
+
image: Experimental_VideoModelV4File | undefined;
|
|
332
|
+
} {
|
|
333
|
+
if (typeof promptArg === 'string') {
|
|
334
|
+
return {
|
|
335
|
+
prompt: promptArg,
|
|
336
|
+
image: undefined,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
let image: Experimental_VideoModelV4File | undefined;
|
|
341
|
+
|
|
342
|
+
if (promptArg.image != null) {
|
|
343
|
+
const dataContent = promptArg.image;
|
|
344
|
+
|
|
345
|
+
if (typeof dataContent === 'string') {
|
|
346
|
+
if (
|
|
347
|
+
dataContent.startsWith('http://') ||
|
|
348
|
+
dataContent.startsWith('https://')
|
|
349
|
+
) {
|
|
350
|
+
image = {
|
|
351
|
+
type: 'url',
|
|
352
|
+
url: dataContent,
|
|
353
|
+
};
|
|
354
|
+
} else if (dataContent.startsWith('data:')) {
|
|
355
|
+
const { mediaType, base64Content } = splitDataUrl(dataContent);
|
|
356
|
+
image = {
|
|
357
|
+
type: 'file',
|
|
358
|
+
mediaType: mediaType ?? 'image/png',
|
|
359
|
+
data: convertBase64ToUint8Array(base64Content ?? ''),
|
|
360
|
+
};
|
|
361
|
+
} else {
|
|
362
|
+
const bytes = convertBase64ToUint8Array(dataContent);
|
|
363
|
+
const mediaType =
|
|
364
|
+
detectMediaType({
|
|
365
|
+
data: bytes,
|
|
366
|
+
signatures: imageMediaTypeSignatures,
|
|
367
|
+
}) ?? 'image/png';
|
|
368
|
+
|
|
369
|
+
image = {
|
|
370
|
+
type: 'file',
|
|
371
|
+
mediaType,
|
|
372
|
+
data: bytes,
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
} else if (dataContent instanceof Uint8Array) {
|
|
376
|
+
const mediaType =
|
|
377
|
+
detectMediaType({
|
|
378
|
+
data: dataContent,
|
|
379
|
+
signatures: imageMediaTypeSignatures,
|
|
380
|
+
}) ?? 'image/png';
|
|
381
|
+
|
|
382
|
+
image = {
|
|
383
|
+
type: 'file',
|
|
384
|
+
mediaType,
|
|
385
|
+
data: dataContent,
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
return {
|
|
391
|
+
prompt: promptArg.text,
|
|
392
|
+
image,
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
async function invokeModelMaxVideosPerCall(model: Experimental_VideoModelV4) {
|
|
397
|
+
if (typeof model.maxVideosPerCall === 'function') {
|
|
398
|
+
return await model.maxVideosPerCall({ modelId: model.modelId });
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
return model.maxVideosPerCall;
|
|
402
|
+
}
|
package/src/global.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ProviderV2, ProviderV3, ProviderV4 } from '@ai-sdk/provider';
|
|
2
|
+
import { LogWarningsFunction } from './logger/log-warnings';
|
|
3
|
+
import type { TelemetryIntegration } from './telemetry/telemetry-integration';
|
|
4
|
+
|
|
5
|
+
// add AI SDK default provider to the globalThis object
|
|
6
|
+
declare global {
|
|
7
|
+
/**
|
|
8
|
+
* The default provider to use for the AI SDK.
|
|
9
|
+
* String model ids are resolved to the default provider and model id.
|
|
10
|
+
*
|
|
11
|
+
* If not set, the default provider is the Vercel AI gateway provider.
|
|
12
|
+
*
|
|
13
|
+
* @see https://ai-sdk.dev/docs/ai-sdk-core/provider-management#global-provider-configuration
|
|
14
|
+
*/
|
|
15
|
+
var AI_SDK_DEFAULT_PROVIDER: ProviderV4 | ProviderV3 | ProviderV2 | undefined;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The warning logger to use for the AI SDK.
|
|
19
|
+
*
|
|
20
|
+
* If not set, the default logger is the console.warn function.
|
|
21
|
+
*
|
|
22
|
+
* If set to false, no warnings are logged.
|
|
23
|
+
*/
|
|
24
|
+
var AI_SDK_LOG_WARNINGS: LogWarningsFunction | undefined | false;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Globally registered telemetry integrations for the AI SDK.
|
|
28
|
+
*
|
|
29
|
+
* Integrations registered here receive lifecycle events (onStart, onStepStart,
|
|
30
|
+
* etc.) from every `generateText`, `streamText`, and similar call.
|
|
31
|
+
*
|
|
32
|
+
* Prefer using `registerTelemetryIntegration()` from `'ai'` instead of
|
|
33
|
+
* assigning this directly.
|
|
34
|
+
*/
|
|
35
|
+
var AI_SDK_TELEMETRY_INTEGRATIONS: TelemetryIntegration[] | undefined;
|
|
36
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// re-exports:
|
|
2
|
+
export { createGateway, gateway, type GatewayModelId } from '@ai-sdk/gateway';
|
|
3
|
+
export {
|
|
4
|
+
asSchema,
|
|
5
|
+
createIdGenerator,
|
|
6
|
+
dynamicTool,
|
|
7
|
+
generateId,
|
|
8
|
+
jsonSchema,
|
|
9
|
+
parseJsonEventStream,
|
|
10
|
+
tool,
|
|
11
|
+
zodSchema,
|
|
12
|
+
type FlexibleSchema,
|
|
13
|
+
type IdGenerator,
|
|
14
|
+
type InferSchema,
|
|
15
|
+
type InferToolInput,
|
|
16
|
+
type InferToolOutput,
|
|
17
|
+
type Schema,
|
|
18
|
+
type Tool,
|
|
19
|
+
type ToolApprovalRequest,
|
|
20
|
+
type ToolApprovalResponse,
|
|
21
|
+
type ToolCallOptions,
|
|
22
|
+
type ToolExecutionOptions,
|
|
23
|
+
type ToolExecuteFunction,
|
|
24
|
+
} from '@ai-sdk/provider-utils';
|
|
25
|
+
|
|
26
|
+
// directory exports
|
|
27
|
+
export * from './agent';
|
|
28
|
+
export * from './embed';
|
|
29
|
+
export * from './error';
|
|
30
|
+
export * from './generate-image';
|
|
31
|
+
export * from './generate-object';
|
|
32
|
+
export * from './generate-speech';
|
|
33
|
+
export * from './generate-text';
|
|
34
|
+
export * from './generate-video';
|
|
35
|
+
export * from './logger';
|
|
36
|
+
export * from './middleware';
|
|
37
|
+
export * from './prompt';
|
|
38
|
+
export * from './registry';
|
|
39
|
+
export * from './rerank';
|
|
40
|
+
export * from './text-stream';
|
|
41
|
+
export * from './transcribe';
|
|
42
|
+
export * from './types';
|
|
43
|
+
export * from './ui';
|
|
44
|
+
export * from './ui-message-stream';
|
|
45
|
+
export * from './util';
|
|
46
|
+
export * from './telemetry';
|
|
47
|
+
|
|
48
|
+
// import globals
|
|
49
|
+
import './global';
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { Warning } from '../types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A function for logging warnings.
|
|
5
|
+
*
|
|
6
|
+
* You can assign it to the `AI_SDK_LOG_WARNINGS` global variable to use it as the default warning logger.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* globalThis.AI_SDK_LOG_WARNINGS = (options) => {
|
|
11
|
+
* console.log('WARNINGS:', options.warnings, options.provider, options.model);
|
|
12
|
+
* };
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export type LogWarningsFunction = (options: {
|
|
16
|
+
/**
|
|
17
|
+
* The warnings returned by the model provider.
|
|
18
|
+
*/
|
|
19
|
+
warnings: Warning[];
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The provider id used for the call.
|
|
23
|
+
*/
|
|
24
|
+
provider: string;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The model id used for the call.
|
|
28
|
+
*/
|
|
29
|
+
model: string;
|
|
30
|
+
}) => void;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Formats a warning object into a human-readable string with clear AI SDK branding.
|
|
34
|
+
*
|
|
35
|
+
* @param options - The options for formatting the warning.
|
|
36
|
+
* @param options.warning - The warning to format.
|
|
37
|
+
* @param options.provider - The provider id used for the call.
|
|
38
|
+
* @param options.model - The model id used for the call.
|
|
39
|
+
* @returns A formatted warning message string.
|
|
40
|
+
*/
|
|
41
|
+
function formatWarning({
|
|
42
|
+
warning,
|
|
43
|
+
provider,
|
|
44
|
+
model,
|
|
45
|
+
}: {
|
|
46
|
+
warning: Warning;
|
|
47
|
+
provider: string;
|
|
48
|
+
model: string;
|
|
49
|
+
}): string {
|
|
50
|
+
const prefix = `AI SDK Warning (${provider} / ${model}):`;
|
|
51
|
+
|
|
52
|
+
switch (warning.type) {
|
|
53
|
+
case 'unsupported': {
|
|
54
|
+
let message = `${prefix} The feature "${warning.feature}" is not supported.`;
|
|
55
|
+
if (warning.details) {
|
|
56
|
+
message += ` ${warning.details}`;
|
|
57
|
+
}
|
|
58
|
+
return message;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
case 'compatibility': {
|
|
62
|
+
let message = `${prefix} The feature "${warning.feature}" is used in a compatibility mode.`;
|
|
63
|
+
if (warning.details) {
|
|
64
|
+
message += ` ${warning.details}`;
|
|
65
|
+
}
|
|
66
|
+
return message;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
case 'other': {
|
|
70
|
+
return `${prefix} ${warning.message}`;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
default: {
|
|
74
|
+
// Fallback for any unknown warning types
|
|
75
|
+
return `${prefix} ${JSON.stringify(warning, null, 2)}`;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export const FIRST_WARNING_INFO_MESSAGE =
|
|
81
|
+
'AI SDK Warning System: To turn off warning logging, set the AI_SDK_LOG_WARNINGS global to false.';
|
|
82
|
+
|
|
83
|
+
let hasLoggedBefore = false;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Logs warnings to the console or uses a custom logger if configured.
|
|
87
|
+
*
|
|
88
|
+
* The behavior can be customized via the `AI_SDK_LOG_WARNINGS` global variable:
|
|
89
|
+
* - If set to `false`, warnings are suppressed.
|
|
90
|
+
* - If set to a function, that function is called with the warnings.
|
|
91
|
+
* - Otherwise, warnings are logged to the console using `console.warn`.
|
|
92
|
+
*
|
|
93
|
+
* @param options - The options containing warnings and context.
|
|
94
|
+
* @param options.warnings - The warnings to log.
|
|
95
|
+
* @param options.provider - The provider id used for the call.
|
|
96
|
+
* @param options.model - The model id used for the call.
|
|
97
|
+
*/
|
|
98
|
+
export const logWarnings: LogWarningsFunction = options => {
|
|
99
|
+
// if the warnings array is empty, do nothing
|
|
100
|
+
if (options.warnings.length === 0) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const logger = globalThis.AI_SDK_LOG_WARNINGS;
|
|
105
|
+
|
|
106
|
+
// if the logger is set to false, do nothing
|
|
107
|
+
if (logger === false) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// use the provided logger if it is a function
|
|
112
|
+
if (typeof logger === 'function') {
|
|
113
|
+
logger(options);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// display information note on first call
|
|
118
|
+
if (!hasLoggedBefore) {
|
|
119
|
+
hasLoggedBefore = true;
|
|
120
|
+
console.info(FIRST_WARNING_INFO_MESSAGE);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// default behavior: log warnings to the console
|
|
124
|
+
for (const warning of options.warnings) {
|
|
125
|
+
console.warn(
|
|
126
|
+
formatWarning({
|
|
127
|
+
warning,
|
|
128
|
+
provider: options.provider,
|
|
129
|
+
model: options.model,
|
|
130
|
+
}),
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Resets the internal logging state. Used for testing purposes.
|
|
137
|
+
*/
|
|
138
|
+
export const resetLogWarningsState = () => {
|
|
139
|
+
hasLoggedBefore = false;
|
|
140
|
+
};
|