@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,89 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EmbeddingModelV3,
|
|
3
|
+
EmbeddingModelV4,
|
|
4
|
+
EmbeddingModelV4CallOptions,
|
|
5
|
+
} from '@ai-sdk/provider';
|
|
6
|
+
import { asEmbeddingModelV4 } from '../model/as-embedding-model-v4';
|
|
7
|
+
import { EmbeddingModelMiddleware } from '../types';
|
|
8
|
+
import { asArray } from '../util/as-array';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Wraps an EmbeddingModelV4 instance with middleware functionality.
|
|
12
|
+
* This function allows you to apply middleware to transform parameters,
|
|
13
|
+
* wrap embed operations of an embedding model.
|
|
14
|
+
*
|
|
15
|
+
* @param options - Configuration options for wrapping the embedding model.
|
|
16
|
+
* @param options.model - The original EmbeddingModelV4 instance to be wrapped.
|
|
17
|
+
* @param options.middleware - The middleware to be applied to the embedding model. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.
|
|
18
|
+
* @param options.modelId - Optional custom model ID to override the original model's ID.
|
|
19
|
+
* @param options.providerId - Optional custom provider ID to override the original model's provider ID.
|
|
20
|
+
* @returns A new EmbeddingModelV4 instance with middleware applied.
|
|
21
|
+
*/
|
|
22
|
+
export const wrapEmbeddingModel = ({
|
|
23
|
+
model: inputModel,
|
|
24
|
+
middleware: middlewareArg,
|
|
25
|
+
modelId,
|
|
26
|
+
providerId,
|
|
27
|
+
}: {
|
|
28
|
+
model: EmbeddingModelV3 | EmbeddingModelV4;
|
|
29
|
+
middleware: EmbeddingModelMiddleware | EmbeddingModelMiddleware[];
|
|
30
|
+
modelId?: string;
|
|
31
|
+
providerId?: string;
|
|
32
|
+
}): EmbeddingModelV4 => {
|
|
33
|
+
const model = asEmbeddingModelV4(inputModel);
|
|
34
|
+
return [...asArray(middlewareArg)]
|
|
35
|
+
.reverse()
|
|
36
|
+
.reduce((wrappedModel, middleware) => {
|
|
37
|
+
return doWrap({ model: wrappedModel, middleware, modelId, providerId });
|
|
38
|
+
}, model);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const doWrap = ({
|
|
42
|
+
model,
|
|
43
|
+
middleware: {
|
|
44
|
+
transformParams,
|
|
45
|
+
wrapEmbed,
|
|
46
|
+
overrideProvider,
|
|
47
|
+
overrideModelId,
|
|
48
|
+
overrideMaxEmbeddingsPerCall,
|
|
49
|
+
overrideSupportsParallelCalls,
|
|
50
|
+
},
|
|
51
|
+
modelId,
|
|
52
|
+
providerId,
|
|
53
|
+
}: {
|
|
54
|
+
model: EmbeddingModelV4;
|
|
55
|
+
middleware: EmbeddingModelMiddleware;
|
|
56
|
+
modelId?: string;
|
|
57
|
+
providerId?: string;
|
|
58
|
+
}): EmbeddingModelV4 => {
|
|
59
|
+
async function doTransform({
|
|
60
|
+
params,
|
|
61
|
+
}: {
|
|
62
|
+
params: EmbeddingModelV4CallOptions;
|
|
63
|
+
}) {
|
|
64
|
+
return transformParams ? await transformParams({ params, model }) : params;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return {
|
|
68
|
+
specificationVersion: 'v4',
|
|
69
|
+
provider: providerId ?? overrideProvider?.({ model }) ?? model.provider,
|
|
70
|
+
modelId: modelId ?? overrideModelId?.({ model }) ?? model.modelId,
|
|
71
|
+
maxEmbeddingsPerCall:
|
|
72
|
+
overrideMaxEmbeddingsPerCall?.({ model }) ?? model.maxEmbeddingsPerCall,
|
|
73
|
+
supportsParallelCalls:
|
|
74
|
+
overrideSupportsParallelCalls?.({ model }) ?? model.supportsParallelCalls,
|
|
75
|
+
async doEmbed(
|
|
76
|
+
params: EmbeddingModelV4CallOptions,
|
|
77
|
+
): Promise<Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>> {
|
|
78
|
+
const transformedParams = await doTransform({ params });
|
|
79
|
+
const doEmbed = async () => model.doEmbed(transformedParams);
|
|
80
|
+
return wrapEmbed
|
|
81
|
+
? wrapEmbed({
|
|
82
|
+
doEmbed,
|
|
83
|
+
params: transformedParams,
|
|
84
|
+
model,
|
|
85
|
+
})
|
|
86
|
+
: doEmbed();
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ImageModelV2,
|
|
3
|
+
ImageModelV3,
|
|
4
|
+
ImageModelV4,
|
|
5
|
+
ImageModelV4CallOptions,
|
|
6
|
+
} from '@ai-sdk/provider';
|
|
7
|
+
import { asImageModelV4 } from '../model/as-image-model-v4';
|
|
8
|
+
import { ImageModelMiddleware } from '../types';
|
|
9
|
+
import { asArray } from '../util/as-array';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Wraps an ImageModelV4 instance with middleware functionality.
|
|
13
|
+
* This function allows you to apply middleware to transform parameters
|
|
14
|
+
* and wrap generate operations of an image model.
|
|
15
|
+
*
|
|
16
|
+
* @param options - Configuration options for wrapping the image model.
|
|
17
|
+
* @param options.model - The original ImageModelV4 instance to be wrapped.
|
|
18
|
+
* @param options.middleware - The middleware to be applied to the image model. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.
|
|
19
|
+
* @param options.modelId - Optional custom model ID to override the original model's ID.
|
|
20
|
+
* @param options.providerId - Optional custom provider ID to override the original model's provider ID.
|
|
21
|
+
* @returns A new ImageModelV4 instance with middleware applied.
|
|
22
|
+
*/
|
|
23
|
+
export const wrapImageModel = ({
|
|
24
|
+
model: inputModel,
|
|
25
|
+
middleware: middlewareArg,
|
|
26
|
+
modelId,
|
|
27
|
+
providerId,
|
|
28
|
+
}: {
|
|
29
|
+
model: ImageModelV2 | ImageModelV3 | ImageModelV4;
|
|
30
|
+
middleware: ImageModelMiddleware | ImageModelMiddleware[];
|
|
31
|
+
modelId?: string;
|
|
32
|
+
providerId?: string;
|
|
33
|
+
}): ImageModelV4 => {
|
|
34
|
+
const model = asImageModelV4(inputModel);
|
|
35
|
+
return [...asArray(middlewareArg)]
|
|
36
|
+
.reverse()
|
|
37
|
+
.reduce((wrappedModel, middleware) => {
|
|
38
|
+
return doWrap({ model: wrappedModel, middleware, modelId, providerId });
|
|
39
|
+
}, model);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const doWrap = ({
|
|
43
|
+
model,
|
|
44
|
+
middleware: {
|
|
45
|
+
transformParams,
|
|
46
|
+
wrapGenerate,
|
|
47
|
+
overrideProvider,
|
|
48
|
+
overrideModelId,
|
|
49
|
+
overrideMaxImagesPerCall,
|
|
50
|
+
},
|
|
51
|
+
modelId,
|
|
52
|
+
providerId,
|
|
53
|
+
}: {
|
|
54
|
+
model: ImageModelV4;
|
|
55
|
+
middleware: ImageModelMiddleware;
|
|
56
|
+
modelId?: string;
|
|
57
|
+
providerId?: string;
|
|
58
|
+
}): ImageModelV4 => {
|
|
59
|
+
async function doTransform({ params }: { params: ImageModelV4CallOptions }) {
|
|
60
|
+
return transformParams ? await transformParams({ params, model }) : params;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const maxImagesPerCallRaw =
|
|
64
|
+
overrideMaxImagesPerCall?.({ model }) ?? model.maxImagesPerCall;
|
|
65
|
+
|
|
66
|
+
// Ensure provider implementations that rely on `this` inside `maxImagesPerCall`
|
|
67
|
+
// keep working after the value is copied onto the wrapper object.
|
|
68
|
+
const maxImagesPerCall =
|
|
69
|
+
maxImagesPerCallRaw instanceof Function
|
|
70
|
+
? maxImagesPerCallRaw.bind(model)
|
|
71
|
+
: maxImagesPerCallRaw;
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
specificationVersion: 'v4',
|
|
75
|
+
provider: providerId ?? overrideProvider?.({ model }) ?? model.provider,
|
|
76
|
+
modelId: modelId ?? overrideModelId?.({ model }) ?? model.modelId,
|
|
77
|
+
maxImagesPerCall,
|
|
78
|
+
async doGenerate(
|
|
79
|
+
params: ImageModelV4CallOptions,
|
|
80
|
+
): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>> {
|
|
81
|
+
const transformedParams = await doTransform({ params });
|
|
82
|
+
const doGenerate = async () => model.doGenerate(transformedParams);
|
|
83
|
+
return wrapGenerate
|
|
84
|
+
? wrapGenerate({
|
|
85
|
+
doGenerate,
|
|
86
|
+
params: transformedParams,
|
|
87
|
+
model,
|
|
88
|
+
})
|
|
89
|
+
: doGenerate();
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import {
|
|
2
|
+
LanguageModelV2,
|
|
3
|
+
LanguageModelV3,
|
|
4
|
+
LanguageModelV4,
|
|
5
|
+
LanguageModelV4CallOptions,
|
|
6
|
+
LanguageModelV4GenerateResult,
|
|
7
|
+
LanguageModelV4StreamResult,
|
|
8
|
+
} from '@ai-sdk/provider';
|
|
9
|
+
import { asLanguageModelV4 } from '../model/as-language-model-v4';
|
|
10
|
+
import { LanguageModelMiddleware } from '../types';
|
|
11
|
+
import { asArray } from '../util/as-array';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Wraps a LanguageModelV4 instance with middleware functionality.
|
|
15
|
+
* This function allows you to apply middleware to transform parameters,
|
|
16
|
+
* wrap generate operations, and wrap stream operations of a language model.
|
|
17
|
+
*
|
|
18
|
+
* @param options - Configuration options for wrapping the language model.
|
|
19
|
+
* @param options.model - The original LanguageModelV4 instance to be wrapped.
|
|
20
|
+
* @param options.middleware - The middleware to be applied to the language model. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.
|
|
21
|
+
* @param options.modelId - Optional custom model ID to override the original model's ID.
|
|
22
|
+
* @param options.providerId - Optional custom provider ID to override the original model's provider ID.
|
|
23
|
+
* @returns A new LanguageModelV4 instance with middleware applied.
|
|
24
|
+
*/
|
|
25
|
+
export const wrapLanguageModel = ({
|
|
26
|
+
model: inputModel,
|
|
27
|
+
middleware: middlewareArg,
|
|
28
|
+
modelId,
|
|
29
|
+
providerId,
|
|
30
|
+
}: {
|
|
31
|
+
model: LanguageModelV2 | LanguageModelV3 | LanguageModelV4;
|
|
32
|
+
middleware: LanguageModelMiddleware | LanguageModelMiddleware[];
|
|
33
|
+
modelId?: string;
|
|
34
|
+
providerId?: string;
|
|
35
|
+
}): LanguageModelV4 => {
|
|
36
|
+
const model = asLanguageModelV4(inputModel);
|
|
37
|
+
return [...asArray(middlewareArg)]
|
|
38
|
+
.reverse()
|
|
39
|
+
.reduce((wrappedModel, middleware) => {
|
|
40
|
+
return doWrap({ model: wrappedModel, middleware, modelId, providerId });
|
|
41
|
+
}, model);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const doWrap = ({
|
|
45
|
+
model,
|
|
46
|
+
middleware: {
|
|
47
|
+
transformParams,
|
|
48
|
+
wrapGenerate,
|
|
49
|
+
wrapStream,
|
|
50
|
+
overrideProvider,
|
|
51
|
+
overrideModelId,
|
|
52
|
+
overrideSupportedUrls,
|
|
53
|
+
},
|
|
54
|
+
modelId,
|
|
55
|
+
providerId,
|
|
56
|
+
}: {
|
|
57
|
+
model: LanguageModelV4;
|
|
58
|
+
middleware: LanguageModelMiddleware;
|
|
59
|
+
modelId?: string;
|
|
60
|
+
providerId?: string;
|
|
61
|
+
}): LanguageModelV4 => {
|
|
62
|
+
async function doTransform({
|
|
63
|
+
params,
|
|
64
|
+
type,
|
|
65
|
+
}: {
|
|
66
|
+
params: LanguageModelV4CallOptions;
|
|
67
|
+
type: 'generate' | 'stream';
|
|
68
|
+
}) {
|
|
69
|
+
return transformParams
|
|
70
|
+
? await transformParams({ params, type, model })
|
|
71
|
+
: params;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return {
|
|
75
|
+
specificationVersion: 'v4',
|
|
76
|
+
|
|
77
|
+
provider: providerId ?? overrideProvider?.({ model }) ?? model.provider,
|
|
78
|
+
modelId: modelId ?? overrideModelId?.({ model }) ?? model.modelId,
|
|
79
|
+
supportedUrls: overrideSupportedUrls?.({ model }) ?? model.supportedUrls,
|
|
80
|
+
|
|
81
|
+
async doGenerate(
|
|
82
|
+
params: LanguageModelV4CallOptions,
|
|
83
|
+
): Promise<LanguageModelV4GenerateResult> {
|
|
84
|
+
const transformedParams = await doTransform({ params, type: 'generate' });
|
|
85
|
+
const doGenerate = async () => model.doGenerate(transformedParams);
|
|
86
|
+
const doStream = async () => model.doStream(transformedParams);
|
|
87
|
+
return wrapGenerate
|
|
88
|
+
? wrapGenerate({
|
|
89
|
+
doGenerate,
|
|
90
|
+
doStream,
|
|
91
|
+
params: transformedParams,
|
|
92
|
+
model,
|
|
93
|
+
})
|
|
94
|
+
: doGenerate();
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
async doStream(
|
|
98
|
+
params: LanguageModelV4CallOptions,
|
|
99
|
+
): Promise<LanguageModelV4StreamResult> {
|
|
100
|
+
const transformedParams = await doTransform({ params, type: 'stream' });
|
|
101
|
+
const doGenerate = async () => model.doGenerate(transformedParams);
|
|
102
|
+
const doStream = async () => model.doStream(transformedParams);
|
|
103
|
+
return wrapStream
|
|
104
|
+
? wrapStream({ doGenerate, doStream, params: transformedParams, model })
|
|
105
|
+
: doStream();
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { ProviderV2, ProviderV3, ProviderV4 } from '@ai-sdk/provider';
|
|
2
|
+
import { ImageModelMiddleware } from '../types/image-model-middleware';
|
|
3
|
+
import { LanguageModelMiddleware } from '../types/language-model-middleware';
|
|
4
|
+
import { wrapImageModel } from './wrap-image-model';
|
|
5
|
+
import { wrapLanguageModel } from './wrap-language-model';
|
|
6
|
+
import { asProviderV4 } from '../model/as-provider-v4';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Wraps a ProviderV4 instance with middleware functionality.
|
|
10
|
+
* This function allows you to apply middleware to all language models
|
|
11
|
+
* from the provider, enabling you to transform parameters, wrap generate
|
|
12
|
+
* operations, and wrap stream operations for every language model.
|
|
13
|
+
*
|
|
14
|
+
* @param options - Configuration options for wrapping the provider.
|
|
15
|
+
* @param options.provider - The original ProviderV4 instance to be wrapped.
|
|
16
|
+
* @param options.languageModelMiddleware - The middleware to be applied to all language models from the provider. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.
|
|
17
|
+
* @param options.imageModelMiddleware - Optional middleware to be applied to all image models from the provider. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.
|
|
18
|
+
* @returns A new ProviderV4 instance with middleware applied to all language models.
|
|
19
|
+
*/
|
|
20
|
+
export function wrapProvider({
|
|
21
|
+
provider,
|
|
22
|
+
languageModelMiddleware,
|
|
23
|
+
imageModelMiddleware,
|
|
24
|
+
}: {
|
|
25
|
+
provider: ProviderV4 | ProviderV3 | ProviderV2;
|
|
26
|
+
languageModelMiddleware: LanguageModelMiddleware | LanguageModelMiddleware[];
|
|
27
|
+
imageModelMiddleware?: ImageModelMiddleware | ImageModelMiddleware[];
|
|
28
|
+
}): ProviderV4 {
|
|
29
|
+
const providerV4 = asProviderV4(provider);
|
|
30
|
+
return {
|
|
31
|
+
specificationVersion: 'v4',
|
|
32
|
+
languageModel: (modelId: string) =>
|
|
33
|
+
wrapLanguageModel({
|
|
34
|
+
model: providerV4.languageModel(modelId),
|
|
35
|
+
middleware: languageModelMiddleware,
|
|
36
|
+
}),
|
|
37
|
+
embeddingModel: providerV4.embeddingModel,
|
|
38
|
+
imageModel: (modelId: string) => {
|
|
39
|
+
let model = providerV4.imageModel(modelId);
|
|
40
|
+
|
|
41
|
+
if (imageModelMiddleware != null) {
|
|
42
|
+
model = wrapImageModel({ model, middleware: imageModelMiddleware });
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return model;
|
|
46
|
+
},
|
|
47
|
+
transcriptionModel: providerV4.transcriptionModel,
|
|
48
|
+
speechModel: providerV4.speechModel,
|
|
49
|
+
rerankingModel: providerV4.rerankingModel,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EmbeddingModelV2, EmbeddingModelV3 } from '@ai-sdk/provider';
|
|
2
|
+
import { logV2CompatibilityWarning } from '../util/log-v2-compatibility-warning';
|
|
3
|
+
|
|
4
|
+
export function asEmbeddingModelV3(
|
|
5
|
+
model: EmbeddingModelV2<string> | EmbeddingModelV3,
|
|
6
|
+
): EmbeddingModelV3 {
|
|
7
|
+
if (model.specificationVersion === 'v3') {
|
|
8
|
+
return model;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
logV2CompatibilityWarning({
|
|
12
|
+
provider: model.provider,
|
|
13
|
+
modelId: model.modelId,
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
// TODO this could break, we need to properly map v2 to v3
|
|
17
|
+
// and support all relevant v3 properties:
|
|
18
|
+
return new Proxy(model, {
|
|
19
|
+
get(target, prop: keyof EmbeddingModelV2<string>) {
|
|
20
|
+
if (prop === 'specificationVersion') return 'v3';
|
|
21
|
+
return target[prop];
|
|
22
|
+
},
|
|
23
|
+
}) as unknown as EmbeddingModelV3;
|
|
24
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EmbeddingModelV2,
|
|
3
|
+
EmbeddingModelV3,
|
|
4
|
+
EmbeddingModelV4,
|
|
5
|
+
} from '@ai-sdk/provider';
|
|
6
|
+
import { asEmbeddingModelV3 } from './as-embedding-model-v3';
|
|
7
|
+
|
|
8
|
+
export function asEmbeddingModelV4(
|
|
9
|
+
model: EmbeddingModelV2<string> | EmbeddingModelV3 | EmbeddingModelV4,
|
|
10
|
+
): EmbeddingModelV4 {
|
|
11
|
+
if (model.specificationVersion === 'v4') {
|
|
12
|
+
return model;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// first convert v2 to v3, then proxy v3 as v4:
|
|
16
|
+
const v3Model =
|
|
17
|
+
model.specificationVersion === 'v2' ? asEmbeddingModelV3(model) : model;
|
|
18
|
+
|
|
19
|
+
return new Proxy(v3Model, {
|
|
20
|
+
get(target, prop: keyof EmbeddingModelV3) {
|
|
21
|
+
if (prop === 'specificationVersion') return 'v4';
|
|
22
|
+
return target[prop];
|
|
23
|
+
},
|
|
24
|
+
}) as unknown as EmbeddingModelV4;
|
|
25
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ImageModelV2, ImageModelV3 } from '@ai-sdk/provider';
|
|
2
|
+
import { logV2CompatibilityWarning } from '../util/log-v2-compatibility-warning';
|
|
3
|
+
|
|
4
|
+
export function asImageModelV3(
|
|
5
|
+
model: ImageModelV2 | ImageModelV3,
|
|
6
|
+
): ImageModelV3 {
|
|
7
|
+
if (model.specificationVersion === 'v3') {
|
|
8
|
+
return model;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
logV2CompatibilityWarning({
|
|
12
|
+
provider: model.provider,
|
|
13
|
+
modelId: model.modelId,
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
// TODO this could break, we need to properly map v2 to v3
|
|
17
|
+
// and support all relevant v3 properties:
|
|
18
|
+
return new Proxy(model, {
|
|
19
|
+
get(target, prop: keyof ImageModelV2) {
|
|
20
|
+
if (prop === 'specificationVersion') return 'v3';
|
|
21
|
+
return target[prop];
|
|
22
|
+
},
|
|
23
|
+
}) as unknown as ImageModelV3;
|
|
24
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ImageModelV2, ImageModelV3, ImageModelV4 } from '@ai-sdk/provider';
|
|
2
|
+
import { asImageModelV3 } from './as-image-model-v3';
|
|
3
|
+
|
|
4
|
+
export function asImageModelV4(
|
|
5
|
+
model: ImageModelV2 | ImageModelV3 | ImageModelV4,
|
|
6
|
+
): ImageModelV4 {
|
|
7
|
+
if (model.specificationVersion === 'v4') {
|
|
8
|
+
return model;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// first convert v2 to v3, then proxy v3 as v4:
|
|
12
|
+
const v3Model =
|
|
13
|
+
model.specificationVersion === 'v2' ? asImageModelV3(model) : model;
|
|
14
|
+
|
|
15
|
+
return new Proxy(v3Model, {
|
|
16
|
+
get(target, prop: keyof ImageModelV3) {
|
|
17
|
+
if (prop === 'specificationVersion') return 'v4';
|
|
18
|
+
return target[prop];
|
|
19
|
+
},
|
|
20
|
+
}) as unknown as ImageModelV4;
|
|
21
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import {
|
|
2
|
+
LanguageModelV2,
|
|
3
|
+
LanguageModelV2FinishReason,
|
|
4
|
+
LanguageModelV2StreamPart,
|
|
5
|
+
LanguageModelV2Usage,
|
|
6
|
+
LanguageModelV3,
|
|
7
|
+
LanguageModelV3FinishReason,
|
|
8
|
+
LanguageModelV3StreamPart,
|
|
9
|
+
LanguageModelV3Usage,
|
|
10
|
+
} from '@ai-sdk/provider';
|
|
11
|
+
import { logV2CompatibilityWarning } from '../util/log-v2-compatibility-warning';
|
|
12
|
+
|
|
13
|
+
export function asLanguageModelV3(
|
|
14
|
+
model: LanguageModelV2 | LanguageModelV3,
|
|
15
|
+
): LanguageModelV3 {
|
|
16
|
+
if (model.specificationVersion === 'v3') {
|
|
17
|
+
return model;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
logV2CompatibilityWarning({
|
|
21
|
+
provider: model.provider,
|
|
22
|
+
modelId: model.modelId,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// TODO this could break, we need to properly map v2 to v3
|
|
26
|
+
// and support all relevant v3 properties:
|
|
27
|
+
return new Proxy(model, {
|
|
28
|
+
get(target, prop: keyof LanguageModelV2) {
|
|
29
|
+
switch (prop) {
|
|
30
|
+
case 'specificationVersion':
|
|
31
|
+
return 'v3';
|
|
32
|
+
case 'doGenerate':
|
|
33
|
+
return async (...args: Parameters<LanguageModelV2['doGenerate']>) => {
|
|
34
|
+
const result = await target.doGenerate(...args);
|
|
35
|
+
return {
|
|
36
|
+
...result,
|
|
37
|
+
finishReason: convertV2FinishReasonToV3(result.finishReason),
|
|
38
|
+
usage: convertV2UsageToV3(result.usage),
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
case 'doStream':
|
|
42
|
+
return async (...args: Parameters<LanguageModelV2['doStream']>) => {
|
|
43
|
+
const result = await target.doStream(...args);
|
|
44
|
+
return {
|
|
45
|
+
...result,
|
|
46
|
+
stream: convertV2StreamToV3(result.stream),
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
default:
|
|
50
|
+
return target[prop];
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
}) as unknown as LanguageModelV3;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function convertV2StreamToV3(
|
|
57
|
+
stream: ReadableStream<LanguageModelV2StreamPart>,
|
|
58
|
+
): ReadableStream<LanguageModelV3StreamPart> {
|
|
59
|
+
return stream.pipeThrough(
|
|
60
|
+
new TransformStream<LanguageModelV2StreamPart, LanguageModelV3StreamPart>({
|
|
61
|
+
transform(chunk, controller) {
|
|
62
|
+
switch (chunk.type) {
|
|
63
|
+
case 'finish':
|
|
64
|
+
controller.enqueue({
|
|
65
|
+
...chunk,
|
|
66
|
+
finishReason: convertV2FinishReasonToV3(chunk.finishReason),
|
|
67
|
+
usage: convertV2UsageToV3(chunk.usage),
|
|
68
|
+
});
|
|
69
|
+
break;
|
|
70
|
+
default:
|
|
71
|
+
// TODO: AI SDK 6 - no casting (stream parts need to be mapped)
|
|
72
|
+
controller.enqueue(chunk as LanguageModelV3StreamPart);
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
}),
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function convertV2FinishReasonToV3(
|
|
81
|
+
finishReason: LanguageModelV2FinishReason,
|
|
82
|
+
): LanguageModelV3FinishReason {
|
|
83
|
+
return {
|
|
84
|
+
unified: finishReason === 'unknown' ? 'other' : finishReason,
|
|
85
|
+
raw: undefined,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function convertV2UsageToV3(usage: LanguageModelV2Usage): LanguageModelV3Usage {
|
|
90
|
+
return {
|
|
91
|
+
inputTokens: {
|
|
92
|
+
total: usage.inputTokens,
|
|
93
|
+
noCache: undefined,
|
|
94
|
+
cacheRead: usage.cachedInputTokens,
|
|
95
|
+
cacheWrite: undefined,
|
|
96
|
+
},
|
|
97
|
+
outputTokens: {
|
|
98
|
+
total: usage.outputTokens,
|
|
99
|
+
text: undefined,
|
|
100
|
+
reasoning: usage.reasoningTokens,
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
LanguageModelV2,
|
|
3
|
+
LanguageModelV3,
|
|
4
|
+
LanguageModelV4,
|
|
5
|
+
} from '@ai-sdk/provider';
|
|
6
|
+
import { asLanguageModelV3 } from './as-language-model-v3';
|
|
7
|
+
|
|
8
|
+
export function asLanguageModelV4(
|
|
9
|
+
model: LanguageModelV2 | LanguageModelV3 | LanguageModelV4,
|
|
10
|
+
): LanguageModelV4 {
|
|
11
|
+
if (model.specificationVersion === 'v4') {
|
|
12
|
+
return model;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// first convert v2 to v3, then proxy v3 as v4:
|
|
16
|
+
const v3Model =
|
|
17
|
+
model.specificationVersion === 'v2' ? asLanguageModelV3(model) : model;
|
|
18
|
+
|
|
19
|
+
return new Proxy(v3Model, {
|
|
20
|
+
get(target, prop: keyof LanguageModelV3) {
|
|
21
|
+
if (prop === 'specificationVersion') return 'v4';
|
|
22
|
+
return target[prop];
|
|
23
|
+
},
|
|
24
|
+
}) as unknown as LanguageModelV4;
|
|
25
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ProviderV2, ProviderV3 } from '@ai-sdk/provider';
|
|
2
|
+
import { asEmbeddingModelV3 } from './as-embedding-model-v3';
|
|
3
|
+
import { asImageModelV3 } from './as-image-model-v3';
|
|
4
|
+
import { asLanguageModelV3 } from './as-language-model-v3';
|
|
5
|
+
import { asTranscriptionModelV3 } from './as-transcription-model-v3';
|
|
6
|
+
import { asSpeechModelV3 } from './as-speech-model-v3';
|
|
7
|
+
|
|
8
|
+
export function asProviderV3(provider: ProviderV2 | ProviderV3): ProviderV3 {
|
|
9
|
+
if (
|
|
10
|
+
'specificationVersion' in provider &&
|
|
11
|
+
provider.specificationVersion === 'v3'
|
|
12
|
+
) {
|
|
13
|
+
return provider;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// v3 providers have already been returned
|
|
17
|
+
const v2Provider: ProviderV2 = provider as ProviderV2;
|
|
18
|
+
|
|
19
|
+
return {
|
|
20
|
+
specificationVersion: 'v3',
|
|
21
|
+
languageModel: (modelId: string) =>
|
|
22
|
+
asLanguageModelV3(v2Provider.languageModel(modelId)),
|
|
23
|
+
embeddingModel: (modelId: string) =>
|
|
24
|
+
asEmbeddingModelV3(v2Provider.textEmbeddingModel(modelId)),
|
|
25
|
+
imageModel: (modelId: string) =>
|
|
26
|
+
asImageModelV3(v2Provider.imageModel(modelId)),
|
|
27
|
+
transcriptionModel: v2Provider.transcriptionModel
|
|
28
|
+
? (modelId: string) =>
|
|
29
|
+
asTranscriptionModelV3(v2Provider.transcriptionModel!(modelId))
|
|
30
|
+
: undefined,
|
|
31
|
+
speechModel: v2Provider.speechModel
|
|
32
|
+
? (modelId: string) => asSpeechModelV3(v2Provider.speechModel!(modelId))
|
|
33
|
+
: undefined,
|
|
34
|
+
rerankingModel: undefined, // v2 providers don't have reranking models
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ProviderV2, ProviderV3, ProviderV4 } from '@ai-sdk/provider';
|
|
2
|
+
import { asProviderV3 } from './as-provider-v3';
|
|
3
|
+
import { asEmbeddingModelV4 } from './as-embedding-model-v4';
|
|
4
|
+
import { asImageModelV4 } from './as-image-model-v4';
|
|
5
|
+
import { asLanguageModelV4 } from './as-language-model-v4';
|
|
6
|
+
import { asRerankingModelV4 } from './as-reranking-model-v4';
|
|
7
|
+
import { asTranscriptionModelV4 } from './as-transcription-model-v4';
|
|
8
|
+
import { asSpeechModelV4 } from './as-speech-model-v4';
|
|
9
|
+
|
|
10
|
+
export function asProviderV4(
|
|
11
|
+
provider: ProviderV2 | ProviderV3 | ProviderV4,
|
|
12
|
+
): ProviderV4 {
|
|
13
|
+
if (
|
|
14
|
+
'specificationVersion' in provider &&
|
|
15
|
+
provider.specificationVersion === 'v4'
|
|
16
|
+
) {
|
|
17
|
+
return provider;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// first ensure we have at least a v3 provider:
|
|
21
|
+
const v3Provider: ProviderV3 =
|
|
22
|
+
!('specificationVersion' in provider) ||
|
|
23
|
+
provider.specificationVersion !== 'v3'
|
|
24
|
+
? asProviderV3(provider as ProviderV2)
|
|
25
|
+
: provider;
|
|
26
|
+
|
|
27
|
+
return {
|
|
28
|
+
specificationVersion: 'v4',
|
|
29
|
+
languageModel: (modelId: string) =>
|
|
30
|
+
asLanguageModelV4(v3Provider.languageModel(modelId)),
|
|
31
|
+
embeddingModel: (modelId: string) =>
|
|
32
|
+
asEmbeddingModelV4(v3Provider.embeddingModel(modelId)),
|
|
33
|
+
imageModel: (modelId: string) =>
|
|
34
|
+
asImageModelV4(v3Provider.imageModel(modelId)),
|
|
35
|
+
transcriptionModel: v3Provider.transcriptionModel
|
|
36
|
+
? (modelId: string) =>
|
|
37
|
+
asTranscriptionModelV4(v3Provider.transcriptionModel!(modelId))
|
|
38
|
+
: undefined,
|
|
39
|
+
speechModel: v3Provider.speechModel
|
|
40
|
+
? (modelId: string) => asSpeechModelV4(v3Provider.speechModel!(modelId))
|
|
41
|
+
: undefined,
|
|
42
|
+
rerankingModel: v3Provider.rerankingModel
|
|
43
|
+
? (modelId: string) =>
|
|
44
|
+
asRerankingModelV4(v3Provider.rerankingModel!(modelId))
|
|
45
|
+
: undefined,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RerankingModelV3, RerankingModelV4 } from '@ai-sdk/provider';
|
|
2
|
+
|
|
3
|
+
export function asRerankingModelV4(
|
|
4
|
+
model: RerankingModelV3 | RerankingModelV4,
|
|
5
|
+
): RerankingModelV4 {
|
|
6
|
+
if (model.specificationVersion === 'v4') {
|
|
7
|
+
return model;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
return new Proxy(model, {
|
|
11
|
+
get(target, prop: keyof RerankingModelV3) {
|
|
12
|
+
if (prop === 'specificationVersion') return 'v4';
|
|
13
|
+
return target[prop];
|
|
14
|
+
},
|
|
15
|
+
}) as unknown as RerankingModelV4;
|
|
16
|
+
}
|