@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,210 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EmbeddingModelV3,
|
|
3
|
+
EmbeddingModelV4,
|
|
4
|
+
Experimental_VideoModelV3,
|
|
5
|
+
Experimental_VideoModelV4,
|
|
6
|
+
ImageModelV2,
|
|
7
|
+
ImageModelV3,
|
|
8
|
+
ImageModelV4,
|
|
9
|
+
LanguageModelV2,
|
|
10
|
+
LanguageModelV3,
|
|
11
|
+
LanguageModelV4,
|
|
12
|
+
NoSuchModelError,
|
|
13
|
+
ProviderV2,
|
|
14
|
+
ProviderV3,
|
|
15
|
+
ProviderV4,
|
|
16
|
+
RerankingModelV3,
|
|
17
|
+
RerankingModelV4,
|
|
18
|
+
SpeechModelV2,
|
|
19
|
+
SpeechModelV3,
|
|
20
|
+
SpeechModelV4,
|
|
21
|
+
TranscriptionModelV2,
|
|
22
|
+
TranscriptionModelV3,
|
|
23
|
+
TranscriptionModelV4,
|
|
24
|
+
} from '@ai-sdk/provider';
|
|
25
|
+
import { asEmbeddingModelV4 } from '../model/as-embedding-model-v4';
|
|
26
|
+
import { asImageModelV4 } from '../model/as-image-model-v4';
|
|
27
|
+
import { asLanguageModelV4 } from '../model/as-language-model-v4';
|
|
28
|
+
import { asProviderV4 } from '../model/as-provider-v4';
|
|
29
|
+
import { asRerankingModelV4 } from '../model/as-reranking-model-v4';
|
|
30
|
+
import { asSpeechModelV4 } from '../model/as-speech-model-v4';
|
|
31
|
+
import { asTranscriptionModelV4 } from '../model/as-transcription-model-v4';
|
|
32
|
+
import { asVideoModelV4 } from '../model/as-video-model-v4';
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Creates a custom provider with specified language models, text embedding models, image models, transcription models, speech models, and an optional fallback provider.
|
|
36
|
+
*
|
|
37
|
+
* @param {Object} options - The options for creating the custom provider.
|
|
38
|
+
* @param {Record<string, LanguageModelV4>} [options.languageModels] - A record of language models, where keys are model IDs and values are LanguageModelV4 instances.
|
|
39
|
+
* @param {Record<string, EmbeddingModelV4>} [options.embeddingModels] - A record of text embedding models, where keys are model IDs and values are EmbeddingModelV4 instances.
|
|
40
|
+
* @param {Record<string, ImageModelV4>} [options.imageModels] - A record of image models, where keys are model IDs and values are ImageModelV4 instances.
|
|
41
|
+
* @param {Record<string, TranscriptionModelV4>} [options.transcriptionModels] - A record of transcription models, where keys are model IDs and values are TranscriptionModelV4 instances.
|
|
42
|
+
* @param {Record<string, SpeechModelV4>} [options.speechModels] - A record of speech models, where keys are model IDs and values are SpeechModelV4 instances.
|
|
43
|
+
* @param {Record<string, RerankingModelV4>} [options.rerankingModels] - A record of reranking models, where keys are model IDs and values are RerankingModelV4 instances.
|
|
44
|
+
* @param {ProviderV4} [options.fallbackProvider] - An optional fallback provider to use when a requested model is not found in the custom provider.
|
|
45
|
+
* @returns {ProviderV4} A ProviderV4 object with languageModel, embeddingModel, imageModel, transcriptionModel, and speechModel methods.
|
|
46
|
+
*
|
|
47
|
+
* @throws {NoSuchModelError} Throws when a requested model is not found and no fallback provider is available.
|
|
48
|
+
*/
|
|
49
|
+
export function customProvider<
|
|
50
|
+
LANGUAGE_MODELS extends Record<
|
|
51
|
+
string,
|
|
52
|
+
LanguageModelV2 | LanguageModelV3 | LanguageModelV4
|
|
53
|
+
>,
|
|
54
|
+
EMBEDDING_MODELS extends Record<string, EmbeddingModelV3 | EmbeddingModelV4>,
|
|
55
|
+
IMAGE_MODELS extends Record<
|
|
56
|
+
string,
|
|
57
|
+
ImageModelV2 | ImageModelV3 | ImageModelV4
|
|
58
|
+
>,
|
|
59
|
+
TRANSCRIPTION_MODELS extends Record<
|
|
60
|
+
string,
|
|
61
|
+
TranscriptionModelV2 | TranscriptionModelV3 | TranscriptionModelV4
|
|
62
|
+
>,
|
|
63
|
+
SPEECH_MODELS extends Record<
|
|
64
|
+
string,
|
|
65
|
+
SpeechModelV2 | SpeechModelV3 | SpeechModelV4
|
|
66
|
+
>,
|
|
67
|
+
RERANKING_MODELS extends Record<string, RerankingModelV3 | RerankingModelV4>,
|
|
68
|
+
VIDEO_MODELS extends Record<
|
|
69
|
+
string,
|
|
70
|
+
Experimental_VideoModelV3 | Experimental_VideoModelV4
|
|
71
|
+
>,
|
|
72
|
+
>({
|
|
73
|
+
languageModels,
|
|
74
|
+
embeddingModels,
|
|
75
|
+
imageModels,
|
|
76
|
+
transcriptionModels,
|
|
77
|
+
speechModels,
|
|
78
|
+
rerankingModels,
|
|
79
|
+
videoModels,
|
|
80
|
+
fallbackProvider: fallbackProviderArg,
|
|
81
|
+
}: {
|
|
82
|
+
languageModels?: LANGUAGE_MODELS;
|
|
83
|
+
embeddingModels?: EMBEDDING_MODELS;
|
|
84
|
+
imageModels?: IMAGE_MODELS;
|
|
85
|
+
transcriptionModels?: TRANSCRIPTION_MODELS;
|
|
86
|
+
speechModels?: SPEECH_MODELS;
|
|
87
|
+
rerankingModels?: RERANKING_MODELS;
|
|
88
|
+
videoModels?: VIDEO_MODELS;
|
|
89
|
+
fallbackProvider?: ProviderV4 | ProviderV3 | ProviderV2;
|
|
90
|
+
}): ProviderV4 & {
|
|
91
|
+
languageModel(modelId: ExtractModelId<LANGUAGE_MODELS>): LanguageModelV4;
|
|
92
|
+
embeddingModel(modelId: ExtractModelId<EMBEDDING_MODELS>): EmbeddingModelV4;
|
|
93
|
+
imageModel(modelId: ExtractModelId<IMAGE_MODELS>): ImageModelV4;
|
|
94
|
+
transcriptionModel(
|
|
95
|
+
modelId: ExtractModelId<TRANSCRIPTION_MODELS>,
|
|
96
|
+
): TranscriptionModelV4;
|
|
97
|
+
rerankingModel(modelId: ExtractModelId<RERANKING_MODELS>): RerankingModelV4;
|
|
98
|
+
speechModel(modelId: ExtractModelId<SPEECH_MODELS>): SpeechModelV4;
|
|
99
|
+
videoModel(modelId: ExtractModelId<VIDEO_MODELS>): Experimental_VideoModelV4;
|
|
100
|
+
} {
|
|
101
|
+
const fallbackProvider = fallbackProviderArg
|
|
102
|
+
? asProviderV4(fallbackProviderArg)
|
|
103
|
+
: undefined;
|
|
104
|
+
|
|
105
|
+
return {
|
|
106
|
+
specificationVersion: 'v4',
|
|
107
|
+
languageModel(modelId: ExtractModelId<LANGUAGE_MODELS>): LanguageModelV4 {
|
|
108
|
+
if (languageModels != null && modelId in languageModels) {
|
|
109
|
+
return asLanguageModelV4(languageModels[modelId]);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (fallbackProvider) {
|
|
113
|
+
return (fallbackProvider as ProviderV4).languageModel(modelId);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
throw new NoSuchModelError({ modelId, modelType: 'languageModel' });
|
|
117
|
+
},
|
|
118
|
+
|
|
119
|
+
embeddingModel(
|
|
120
|
+
modelId: ExtractModelId<EMBEDDING_MODELS>,
|
|
121
|
+
): EmbeddingModelV4 {
|
|
122
|
+
if (embeddingModels != null && modelId in embeddingModels) {
|
|
123
|
+
return asEmbeddingModelV4(embeddingModels[modelId]);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (fallbackProvider) {
|
|
127
|
+
return (fallbackProvider as ProviderV4).embeddingModel(modelId);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
imageModel(modelId: ExtractModelId<IMAGE_MODELS>): ImageModelV4 {
|
|
134
|
+
if (imageModels != null && modelId in imageModels) {
|
|
135
|
+
return asImageModelV4(imageModels[modelId]);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (fallbackProvider?.imageModel) {
|
|
139
|
+
return (fallbackProvider as ProviderV4).imageModel(modelId);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
throw new NoSuchModelError({ modelId, modelType: 'imageModel' });
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
transcriptionModel(
|
|
146
|
+
modelId: ExtractModelId<TRANSCRIPTION_MODELS>,
|
|
147
|
+
): TranscriptionModelV4 {
|
|
148
|
+
if (transcriptionModels != null && modelId in transcriptionModels) {
|
|
149
|
+
return asTranscriptionModelV4(transcriptionModels[modelId]);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (fallbackProvider?.transcriptionModel) {
|
|
153
|
+
return (fallbackProvider as ProviderV4).transcriptionModel!(modelId);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
throw new NoSuchModelError({ modelId, modelType: 'transcriptionModel' });
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
speechModel(modelId: ExtractModelId<SPEECH_MODELS>): SpeechModelV4 {
|
|
160
|
+
if (speechModels != null && modelId in speechModels) {
|
|
161
|
+
return asSpeechModelV4(speechModels[modelId]);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (fallbackProvider?.speechModel) {
|
|
165
|
+
return (fallbackProvider as ProviderV4).speechModel!(modelId);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
throw new NoSuchModelError({ modelId, modelType: 'speechModel' });
|
|
169
|
+
},
|
|
170
|
+
rerankingModel(
|
|
171
|
+
modelId: ExtractModelId<RERANKING_MODELS>,
|
|
172
|
+
): RerankingModelV4 {
|
|
173
|
+
if (rerankingModels != null && modelId in rerankingModels) {
|
|
174
|
+
return asRerankingModelV4(rerankingModels[modelId]);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if (fallbackProvider?.rerankingModel) {
|
|
178
|
+
return fallbackProvider.rerankingModel(modelId);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
throw new NoSuchModelError({ modelId, modelType: 'rerankingModel' });
|
|
182
|
+
},
|
|
183
|
+
videoModel(
|
|
184
|
+
modelId: ExtractModelId<VIDEO_MODELS>,
|
|
185
|
+
): Experimental_VideoModelV4 {
|
|
186
|
+
if (videoModels != null && modelId in videoModels) {
|
|
187
|
+
return asVideoModelV4(videoModels[modelId]);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// TODO AI SDK v7
|
|
191
|
+
// @ts-expect-error - videoModel support is experimental
|
|
192
|
+
const videoModel = fallbackProvider?.videoModel;
|
|
193
|
+
if (videoModel) {
|
|
194
|
+
return videoModel(modelId);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
throw new NoSuchModelError({ modelId, modelType: 'videoModel' });
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* @deprecated Use `customProvider` instead.
|
|
204
|
+
*/
|
|
205
|
+
export const experimental_customProvider = customProvider;
|
|
206
|
+
|
|
207
|
+
type ExtractModelId<MODELS extends Record<string, unknown>> = Extract<
|
|
208
|
+
keyof MODELS,
|
|
209
|
+
string
|
|
210
|
+
>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { customProvider, experimental_customProvider } from './custom-provider';
|
|
2
|
+
export { NoSuchProviderError } from './no-such-provider-error';
|
|
3
|
+
export {
|
|
4
|
+
createProviderRegistry,
|
|
5
|
+
experimental_createProviderRegistry,
|
|
6
|
+
} from './provider-registry';
|
|
7
|
+
export type { ProviderRegistryProvider } from './provider-registry';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { AISDKError, NoSuchModelError } from '@ai-sdk/provider';
|
|
2
|
+
|
|
3
|
+
const name = 'AI_NoSuchProviderError';
|
|
4
|
+
const marker = `vercel.ai.error.${name}`;
|
|
5
|
+
const symbol = Symbol.for(marker);
|
|
6
|
+
|
|
7
|
+
export class NoSuchProviderError extends NoSuchModelError {
|
|
8
|
+
private readonly [symbol] = true; // used in isInstance
|
|
9
|
+
|
|
10
|
+
readonly providerId: string;
|
|
11
|
+
readonly availableProviders: string[];
|
|
12
|
+
|
|
13
|
+
constructor({
|
|
14
|
+
modelId,
|
|
15
|
+
modelType,
|
|
16
|
+
providerId,
|
|
17
|
+
availableProviders,
|
|
18
|
+
message = `No such provider: ${providerId} (available providers: ${availableProviders.join()})`,
|
|
19
|
+
}: {
|
|
20
|
+
modelId: string;
|
|
21
|
+
modelType:
|
|
22
|
+
| 'languageModel'
|
|
23
|
+
| 'embeddingModel'
|
|
24
|
+
| 'imageModel'
|
|
25
|
+
| 'transcriptionModel'
|
|
26
|
+
| 'speechModel'
|
|
27
|
+
| 'rerankingModel';
|
|
28
|
+
providerId: string;
|
|
29
|
+
availableProviders: string[];
|
|
30
|
+
message?: string;
|
|
31
|
+
}) {
|
|
32
|
+
super({ errorName: name, modelId, modelType, message });
|
|
33
|
+
|
|
34
|
+
this.providerId = providerId;
|
|
35
|
+
this.availableProviders = availableProviders;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
static isInstance(error: unknown): error is NoSuchProviderError {
|
|
39
|
+
return AISDKError.hasMarker(error, marker);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EmbeddingModelV4,
|
|
3
|
+
ImageModelV4,
|
|
4
|
+
LanguageModelV4,
|
|
5
|
+
NoSuchModelError,
|
|
6
|
+
ProviderV2,
|
|
7
|
+
ProviderV3,
|
|
8
|
+
ProviderV4,
|
|
9
|
+
RerankingModelV4,
|
|
10
|
+
SpeechModelV4,
|
|
11
|
+
TranscriptionModelV4,
|
|
12
|
+
} from '@ai-sdk/provider';
|
|
13
|
+
import { wrapImageModel } from '../middleware/wrap-image-model';
|
|
14
|
+
import { wrapLanguageModel } from '../middleware/wrap-language-model';
|
|
15
|
+
import { asProviderV4 } from '../model/as-provider-v4';
|
|
16
|
+
import { ImageModelMiddleware, LanguageModelMiddleware } from '../types';
|
|
17
|
+
import { NoSuchProviderError } from './no-such-provider-error';
|
|
18
|
+
|
|
19
|
+
type ExtractLiteralUnion<T> = T extends string
|
|
20
|
+
? string extends T
|
|
21
|
+
? never
|
|
22
|
+
: T
|
|
23
|
+
: never;
|
|
24
|
+
|
|
25
|
+
export interface ProviderRegistryProvider<
|
|
26
|
+
PROVIDERS extends Record<string, ProviderV4> = Record<string, ProviderV4>,
|
|
27
|
+
SEPARATOR extends string = ':',
|
|
28
|
+
> {
|
|
29
|
+
languageModel<KEY extends keyof PROVIDERS>(
|
|
30
|
+
id: KEY extends string
|
|
31
|
+
? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['languageModel']>>[0]>}`
|
|
32
|
+
: never,
|
|
33
|
+
): LanguageModelV4;
|
|
34
|
+
languageModel<KEY extends keyof PROVIDERS>(
|
|
35
|
+
id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,
|
|
36
|
+
): LanguageModelV4;
|
|
37
|
+
|
|
38
|
+
embeddingModel<KEY extends keyof PROVIDERS>(
|
|
39
|
+
id: KEY extends string
|
|
40
|
+
? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['embeddingModel']>>[0]>}`
|
|
41
|
+
: never,
|
|
42
|
+
): EmbeddingModelV4;
|
|
43
|
+
embeddingModel<KEY extends keyof PROVIDERS>(
|
|
44
|
+
id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,
|
|
45
|
+
): EmbeddingModelV4;
|
|
46
|
+
|
|
47
|
+
imageModel<KEY extends keyof PROVIDERS>(
|
|
48
|
+
id: KEY extends string
|
|
49
|
+
? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['imageModel']>>[0]>}`
|
|
50
|
+
: never,
|
|
51
|
+
): ImageModelV4;
|
|
52
|
+
imageModel<KEY extends keyof PROVIDERS>(
|
|
53
|
+
id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,
|
|
54
|
+
): ImageModelV4;
|
|
55
|
+
|
|
56
|
+
transcriptionModel<KEY extends keyof PROVIDERS>(
|
|
57
|
+
id: KEY extends string
|
|
58
|
+
? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['transcriptionModel']>>[0]>}`
|
|
59
|
+
: never,
|
|
60
|
+
): TranscriptionModelV4;
|
|
61
|
+
transcriptionModel<KEY extends keyof PROVIDERS>(
|
|
62
|
+
id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,
|
|
63
|
+
): TranscriptionModelV4;
|
|
64
|
+
|
|
65
|
+
speechModel<KEY extends keyof PROVIDERS>(
|
|
66
|
+
id: KEY extends string
|
|
67
|
+
? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['speechModel']>>[0]>}`
|
|
68
|
+
: never,
|
|
69
|
+
): SpeechModelV4;
|
|
70
|
+
speechModel<KEY extends keyof PROVIDERS>(
|
|
71
|
+
id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,
|
|
72
|
+
): SpeechModelV4;
|
|
73
|
+
|
|
74
|
+
rerankingModel<KEY extends keyof PROVIDERS>(
|
|
75
|
+
id: KEY extends string
|
|
76
|
+
? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['rerankingModel']>>[0]>}`
|
|
77
|
+
: never,
|
|
78
|
+
): RerankingModelV4;
|
|
79
|
+
rerankingModel<KEY extends keyof PROVIDERS>(
|
|
80
|
+
id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,
|
|
81
|
+
): RerankingModelV4;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Creates a registry for the given providers with optional middleware functionality.
|
|
86
|
+
* This function allows you to register multiple providers and optionally apply middleware
|
|
87
|
+
* to all language models from the registry, enabling you to transform parameters, wrap generate
|
|
88
|
+
* operations, and wrap stream operations for every language model accessed through the registry.
|
|
89
|
+
*
|
|
90
|
+
* @param providers - A record of provider instances to be registered in the registry.
|
|
91
|
+
* @param options - Configuration options for the provider registry.
|
|
92
|
+
* @param options.separator - The separator used between provider ID and model ID in the combined identifier. Defaults to ':'.
|
|
93
|
+
* @param options.languageModelMiddleware - Optional middleware to be applied to all language models from the registry. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.
|
|
94
|
+
* @param options.imageModelMiddleware - Optional middleware to be applied to all image models from the registry. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.
|
|
95
|
+
* @returns A new ProviderRegistryProvider instance that provides access to all registered providers with optional middleware applied to language and image models.
|
|
96
|
+
*/
|
|
97
|
+
export function createProviderRegistry<
|
|
98
|
+
PROVIDERS extends Record<string, ProviderV2 | ProviderV3 | ProviderV4>,
|
|
99
|
+
SEPARATOR extends string = ':',
|
|
100
|
+
>(
|
|
101
|
+
providers: PROVIDERS,
|
|
102
|
+
{
|
|
103
|
+
separator = ':' as SEPARATOR,
|
|
104
|
+
languageModelMiddleware,
|
|
105
|
+
imageModelMiddleware,
|
|
106
|
+
}: {
|
|
107
|
+
separator?: SEPARATOR;
|
|
108
|
+
languageModelMiddleware?:
|
|
109
|
+
| LanguageModelMiddleware
|
|
110
|
+
| LanguageModelMiddleware[];
|
|
111
|
+
imageModelMiddleware?: ImageModelMiddleware | ImageModelMiddleware[];
|
|
112
|
+
} = {},
|
|
113
|
+
): ProviderRegistryProvider<{ [K in keyof PROVIDERS]: ProviderV4 }, SEPARATOR> {
|
|
114
|
+
type V4Providers = { [K in keyof PROVIDERS]: ProviderV4 };
|
|
115
|
+
const registry = new DefaultProviderRegistry<V4Providers, SEPARATOR>({
|
|
116
|
+
separator,
|
|
117
|
+
languageModelMiddleware,
|
|
118
|
+
imageModelMiddleware,
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
for (const [id, provider] of Object.entries(providers)) {
|
|
122
|
+
registry.registerProvider({ id, provider: asProviderV4(provider) } as {
|
|
123
|
+
id: keyof V4Providers;
|
|
124
|
+
provider: V4Providers[keyof V4Providers];
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return registry;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* @deprecated Use `createProviderRegistry` instead.
|
|
133
|
+
*/
|
|
134
|
+
export const experimental_createProviderRegistry = createProviderRegistry;
|
|
135
|
+
|
|
136
|
+
class DefaultProviderRegistry<
|
|
137
|
+
PROVIDERS extends Record<string, ProviderV4>,
|
|
138
|
+
SEPARATOR extends string,
|
|
139
|
+
> implements ProviderRegistryProvider<PROVIDERS, SEPARATOR> {
|
|
140
|
+
private providers: PROVIDERS = {} as PROVIDERS;
|
|
141
|
+
private separator: SEPARATOR;
|
|
142
|
+
private languageModelMiddleware?:
|
|
143
|
+
| LanguageModelMiddleware
|
|
144
|
+
| LanguageModelMiddleware[];
|
|
145
|
+
private imageModelMiddleware?: ImageModelMiddleware | ImageModelMiddleware[];
|
|
146
|
+
|
|
147
|
+
constructor({
|
|
148
|
+
separator,
|
|
149
|
+
languageModelMiddleware,
|
|
150
|
+
imageModelMiddleware,
|
|
151
|
+
}: {
|
|
152
|
+
separator: SEPARATOR;
|
|
153
|
+
languageModelMiddleware?:
|
|
154
|
+
| LanguageModelMiddleware
|
|
155
|
+
| LanguageModelMiddleware[];
|
|
156
|
+
imageModelMiddleware?: ImageModelMiddleware | ImageModelMiddleware[];
|
|
157
|
+
}) {
|
|
158
|
+
this.separator = separator;
|
|
159
|
+
this.languageModelMiddleware = languageModelMiddleware;
|
|
160
|
+
this.imageModelMiddleware = imageModelMiddleware;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
registerProvider<K extends keyof PROVIDERS>({
|
|
164
|
+
id,
|
|
165
|
+
provider,
|
|
166
|
+
}: {
|
|
167
|
+
id: K;
|
|
168
|
+
provider: PROVIDERS[K];
|
|
169
|
+
}): void {
|
|
170
|
+
this.providers[id] = provider;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
private getProvider(
|
|
174
|
+
id: string,
|
|
175
|
+
modelType:
|
|
176
|
+
| 'languageModel'
|
|
177
|
+
| 'embeddingModel'
|
|
178
|
+
| 'imageModel'
|
|
179
|
+
| 'transcriptionModel'
|
|
180
|
+
| 'speechModel'
|
|
181
|
+
| 'rerankingModel',
|
|
182
|
+
): ProviderV4 {
|
|
183
|
+
const provider = this.providers[id as keyof PROVIDERS];
|
|
184
|
+
|
|
185
|
+
if (provider == null) {
|
|
186
|
+
throw new NoSuchProviderError({
|
|
187
|
+
modelId: id,
|
|
188
|
+
modelType,
|
|
189
|
+
providerId: id,
|
|
190
|
+
availableProviders: Object.keys(this.providers),
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return asProviderV4(provider);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
private splitId(
|
|
198
|
+
id: string,
|
|
199
|
+
modelType:
|
|
200
|
+
| 'languageModel'
|
|
201
|
+
| 'embeddingModel'
|
|
202
|
+
| 'imageModel'
|
|
203
|
+
| 'transcriptionModel'
|
|
204
|
+
| 'speechModel'
|
|
205
|
+
| 'rerankingModel',
|
|
206
|
+
): [string, string] {
|
|
207
|
+
const index = id.indexOf(this.separator);
|
|
208
|
+
|
|
209
|
+
if (index === -1) {
|
|
210
|
+
throw new NoSuchModelError({
|
|
211
|
+
modelId: id,
|
|
212
|
+
modelType,
|
|
213
|
+
message:
|
|
214
|
+
`Invalid ${modelType} id for registry: ${id} ` +
|
|
215
|
+
`(must be in the format "providerId${this.separator}modelId")`,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return [id.slice(0, index), id.slice(index + this.separator.length)];
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
languageModel<KEY extends keyof PROVIDERS>(
|
|
223
|
+
id: `${KEY & string}${SEPARATOR}${string}`,
|
|
224
|
+
): LanguageModelV4 {
|
|
225
|
+
const [providerId, modelId] = this.splitId(id, 'languageModel');
|
|
226
|
+
let model = this.getProvider(providerId, 'languageModel').languageModel?.(
|
|
227
|
+
modelId,
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
if (model == null) {
|
|
231
|
+
throw new NoSuchModelError({ modelId: id, modelType: 'languageModel' });
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if (this.languageModelMiddleware != null) {
|
|
235
|
+
model = wrapLanguageModel({
|
|
236
|
+
model,
|
|
237
|
+
middleware: this.languageModelMiddleware,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return model;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
embeddingModel<KEY extends keyof PROVIDERS>(
|
|
245
|
+
id: `${KEY & string}${SEPARATOR}${string}`,
|
|
246
|
+
): EmbeddingModelV4 {
|
|
247
|
+
const [providerId, modelId] = this.splitId(id, 'embeddingModel');
|
|
248
|
+
const provider = this.getProvider(providerId, 'embeddingModel');
|
|
249
|
+
|
|
250
|
+
const model = provider.embeddingModel?.(modelId);
|
|
251
|
+
|
|
252
|
+
if (model == null) {
|
|
253
|
+
throw new NoSuchModelError({
|
|
254
|
+
modelId: id,
|
|
255
|
+
modelType: 'embeddingModel',
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
return model;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
imageModel<KEY extends keyof PROVIDERS>(
|
|
263
|
+
id: `${KEY & string}${SEPARATOR}${string}`,
|
|
264
|
+
): ImageModelV4 {
|
|
265
|
+
const [providerId, modelId] = this.splitId(id, 'imageModel');
|
|
266
|
+
const provider = this.getProvider(providerId, 'imageModel');
|
|
267
|
+
|
|
268
|
+
let model = provider.imageModel?.(modelId);
|
|
269
|
+
|
|
270
|
+
if (model == null) {
|
|
271
|
+
throw new NoSuchModelError({ modelId: id, modelType: 'imageModel' });
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
if (this.imageModelMiddleware != null) {
|
|
275
|
+
model = wrapImageModel({
|
|
276
|
+
model,
|
|
277
|
+
middleware: this.imageModelMiddleware,
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
return model;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
transcriptionModel<KEY extends keyof PROVIDERS>(
|
|
285
|
+
id: `${KEY & string}${SEPARATOR}${string}`,
|
|
286
|
+
): TranscriptionModelV4 {
|
|
287
|
+
const [providerId, modelId] = this.splitId(id, 'transcriptionModel');
|
|
288
|
+
const provider = this.getProvider(providerId, 'transcriptionModel');
|
|
289
|
+
|
|
290
|
+
const model = provider.transcriptionModel?.(modelId);
|
|
291
|
+
|
|
292
|
+
if (model == null) {
|
|
293
|
+
throw new NoSuchModelError({
|
|
294
|
+
modelId: id,
|
|
295
|
+
modelType: 'transcriptionModel',
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
return model;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
speechModel<KEY extends keyof PROVIDERS>(
|
|
303
|
+
id: `${KEY & string}${SEPARATOR}${string}`,
|
|
304
|
+
): SpeechModelV4 {
|
|
305
|
+
const [providerId, modelId] = this.splitId(id, 'speechModel');
|
|
306
|
+
const provider = this.getProvider(providerId, 'speechModel');
|
|
307
|
+
|
|
308
|
+
const model = provider.speechModel?.(modelId);
|
|
309
|
+
|
|
310
|
+
if (model == null) {
|
|
311
|
+
throw new NoSuchModelError({ modelId: id, modelType: 'speechModel' });
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
return model;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
rerankingModel<KEY extends keyof PROVIDERS>(
|
|
318
|
+
id: `${KEY & string}${SEPARATOR}${string}`,
|
|
319
|
+
): RerankingModelV4 {
|
|
320
|
+
const [providerId, modelId] = this.splitId(id, 'rerankingModel');
|
|
321
|
+
const provider = this.getProvider(providerId, 'rerankingModel');
|
|
322
|
+
|
|
323
|
+
const model = provider.rerankingModel?.(modelId);
|
|
324
|
+
|
|
325
|
+
if (model == null) {
|
|
326
|
+
throw new NoSuchModelError({ modelId: id, modelType: 'rerankingModel' });
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
return model;
|
|
330
|
+
}
|
|
331
|
+
}
|