@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,75 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Attributes,
|
|
3
|
+
Span,
|
|
4
|
+
Tracer,
|
|
5
|
+
SpanStatusCode,
|
|
6
|
+
context,
|
|
7
|
+
} from '@opentelemetry/api';
|
|
8
|
+
|
|
9
|
+
export async function recordSpan<T>({
|
|
10
|
+
name,
|
|
11
|
+
tracer,
|
|
12
|
+
attributes,
|
|
13
|
+
fn,
|
|
14
|
+
endWhenDone = true,
|
|
15
|
+
}: {
|
|
16
|
+
name: string;
|
|
17
|
+
tracer: Tracer;
|
|
18
|
+
attributes: Attributes | PromiseLike<Attributes>;
|
|
19
|
+
fn: (span: Span) => Promise<T>;
|
|
20
|
+
endWhenDone?: boolean;
|
|
21
|
+
}) {
|
|
22
|
+
return tracer.startActiveSpan(
|
|
23
|
+
name,
|
|
24
|
+
{ attributes: await attributes },
|
|
25
|
+
async span => {
|
|
26
|
+
// Capture the current context to maintain it across async generator yields
|
|
27
|
+
const ctx = context.active();
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
// Execute within the captured context to ensure async generators
|
|
31
|
+
// don't lose the active span when they yield
|
|
32
|
+
const result = await context.with(ctx, () => fn(span));
|
|
33
|
+
|
|
34
|
+
if (endWhenDone) {
|
|
35
|
+
span.end();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return result;
|
|
39
|
+
} catch (error) {
|
|
40
|
+
try {
|
|
41
|
+
recordErrorOnSpan(span, error);
|
|
42
|
+
} finally {
|
|
43
|
+
// always stop the span when there is an error:
|
|
44
|
+
span.end();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Record an error on a span. Sets the span status to error. If the error is
|
|
55
|
+
* an instance of Error, an exception event with name, message, and stack
|
|
56
|
+
* will also be recorded.
|
|
57
|
+
*
|
|
58
|
+
* @param span - The span to record the error on.
|
|
59
|
+
* @param error - The error to record on the span.
|
|
60
|
+
*/
|
|
61
|
+
export function recordErrorOnSpan(span: Span, error: unknown) {
|
|
62
|
+
if (error instanceof Error) {
|
|
63
|
+
span.recordException({
|
|
64
|
+
name: error.name,
|
|
65
|
+
message: error.message,
|
|
66
|
+
stack: error.stack,
|
|
67
|
+
});
|
|
68
|
+
span.setStatus({
|
|
69
|
+
code: SpanStatusCode.ERROR,
|
|
70
|
+
message: error.message,
|
|
71
|
+
});
|
|
72
|
+
} else {
|
|
73
|
+
span.setStatus({ code: SpanStatusCode.ERROR });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { Attributes, AttributeValue } from '@opentelemetry/api';
|
|
2
|
+
import type { TelemetrySettings } from './telemetry-settings';
|
|
3
|
+
|
|
4
|
+
type ResolvableAttributeValue = () =>
|
|
5
|
+
| AttributeValue
|
|
6
|
+
| PromiseLike<AttributeValue>
|
|
7
|
+
| undefined;
|
|
8
|
+
|
|
9
|
+
export async function selectTelemetryAttributes({
|
|
10
|
+
telemetry,
|
|
11
|
+
attributes,
|
|
12
|
+
}: {
|
|
13
|
+
telemetry?: TelemetrySettings;
|
|
14
|
+
attributes: {
|
|
15
|
+
[attributeKey: string]:
|
|
16
|
+
| AttributeValue
|
|
17
|
+
| { input: ResolvableAttributeValue }
|
|
18
|
+
| { output: ResolvableAttributeValue }
|
|
19
|
+
| undefined;
|
|
20
|
+
};
|
|
21
|
+
}): Promise<Attributes> {
|
|
22
|
+
// when telemetry is disabled, return an empty object to avoid serialization overhead:
|
|
23
|
+
if (telemetry?.isEnabled !== true) {
|
|
24
|
+
return {};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const resultAttributes: Attributes = {};
|
|
28
|
+
|
|
29
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
30
|
+
if (value == null) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// input value, check if it should be recorded:
|
|
35
|
+
if (
|
|
36
|
+
typeof value === 'object' &&
|
|
37
|
+
'input' in value &&
|
|
38
|
+
typeof value.input === 'function'
|
|
39
|
+
) {
|
|
40
|
+
// default to true:
|
|
41
|
+
if (telemetry?.recordInputs === false) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const result = await value.input();
|
|
46
|
+
|
|
47
|
+
if (result != null) {
|
|
48
|
+
resultAttributes[key] = result;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// output value, check if it should be recorded:
|
|
55
|
+
if (
|
|
56
|
+
typeof value === 'object' &&
|
|
57
|
+
'output' in value &&
|
|
58
|
+
typeof value.output === 'function'
|
|
59
|
+
) {
|
|
60
|
+
// default to true:
|
|
61
|
+
if (telemetry?.recordOutputs === false) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const result = await value.output();
|
|
66
|
+
|
|
67
|
+
if (result != null) {
|
|
68
|
+
resultAttributes[key] = result;
|
|
69
|
+
}
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// value is an attribute value already:
|
|
74
|
+
resultAttributes[key] = value as AttributeValue;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return resultAttributes;
|
|
78
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import {
|
|
2
|
+
LanguageModelV4Message,
|
|
3
|
+
LanguageModelV4Prompt,
|
|
4
|
+
} from '@ai-sdk/provider';
|
|
5
|
+
import { convertDataContentToBase64String } from '../prompt/data-content';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Helper utility to serialize prompt content for OpenTelemetry tracing.
|
|
9
|
+
* It is initially created because normalized LanguageModelV4Prompt carries
|
|
10
|
+
* images as Uint8Arrays, on which JSON.stringify acts weirdly, converting
|
|
11
|
+
* them to objects with stringified indices as keys, e.g. {"0": 42, "1": 69 }.
|
|
12
|
+
*/
|
|
13
|
+
export function stringifyForTelemetry(prompt: LanguageModelV4Prompt): string {
|
|
14
|
+
return JSON.stringify(
|
|
15
|
+
prompt.map((message: LanguageModelV4Message) => ({
|
|
16
|
+
...message,
|
|
17
|
+
content:
|
|
18
|
+
typeof message.content === 'string'
|
|
19
|
+
? message.content
|
|
20
|
+
: message.content.map(part =>
|
|
21
|
+
part.type === 'file'
|
|
22
|
+
? {
|
|
23
|
+
...part,
|
|
24
|
+
data:
|
|
25
|
+
part.data instanceof Uint8Array
|
|
26
|
+
? convertDataContentToBase64String(part.data)
|
|
27
|
+
: part.data,
|
|
28
|
+
}
|
|
29
|
+
: part,
|
|
30
|
+
),
|
|
31
|
+
})),
|
|
32
|
+
);
|
|
33
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { TelemetryIntegration } from './telemetry-integration';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Registers a telemetry integration globally.
|
|
5
|
+
*/
|
|
6
|
+
export function registerTelemetryIntegration(
|
|
7
|
+
integration: TelemetryIntegration,
|
|
8
|
+
): void {
|
|
9
|
+
if (!globalThis.AI_SDK_TELEMETRY_INTEGRATIONS) {
|
|
10
|
+
globalThis.AI_SDK_TELEMETRY_INTEGRATIONS = [];
|
|
11
|
+
}
|
|
12
|
+
globalThis.AI_SDK_TELEMETRY_INTEGRATIONS.push(integration);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function getGlobalTelemetryIntegrations(): TelemetryIntegration[] {
|
|
16
|
+
return globalThis.AI_SDK_TELEMETRY_INTEGRATIONS ?? [];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// TODO remove when OTel is moved to a separate package
|
|
20
|
+
export function hasIntegration(integration: TelemetryIntegration): boolean {
|
|
21
|
+
return (globalThis.AI_SDK_TELEMETRY_INTEGRATIONS ?? []).includes(integration);
|
|
22
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
OnChunkEvent,
|
|
3
|
+
OnFinishEvent,
|
|
4
|
+
OnStartEvent,
|
|
5
|
+
OnStepFinishEvent,
|
|
6
|
+
OnStepStartEvent,
|
|
7
|
+
OnToolCallFinishEvent,
|
|
8
|
+
OnToolCallStartEvent,
|
|
9
|
+
} from '../generate-text/core-events';
|
|
10
|
+
import type { Output } from '../generate-text/output';
|
|
11
|
+
import type { ToolSet } from '../generate-text/tool-set';
|
|
12
|
+
import type {
|
|
13
|
+
EmbedOnStartEvent,
|
|
14
|
+
EmbedOnFinishEvent,
|
|
15
|
+
EmbedStartEvent,
|
|
16
|
+
EmbedFinishEvent,
|
|
17
|
+
} from '../embed/embed-events';
|
|
18
|
+
import type {
|
|
19
|
+
RerankOnStartEvent,
|
|
20
|
+
RerankOnFinishEvent,
|
|
21
|
+
RerankStartEvent,
|
|
22
|
+
RerankFinishEvent,
|
|
23
|
+
} from '../rerank/rerank-events';
|
|
24
|
+
import { Listener } from '../util/notify';
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Implement this interface to create custom telemetry integrations.
|
|
28
|
+
* Methods can be sync or return a PromiseLike.
|
|
29
|
+
*/
|
|
30
|
+
export interface TelemetryIntegration {
|
|
31
|
+
/**
|
|
32
|
+
* Called when an operation begins. Fired for both text generation
|
|
33
|
+
* (generateText/streamText) and embedding (embed/embedMany) operations.
|
|
34
|
+
*
|
|
35
|
+
* Use the `operationId` field to distinguish between operation types.
|
|
36
|
+
*/
|
|
37
|
+
onStart?: Listener<
|
|
38
|
+
OnStartEvent<ToolSet, Output> | EmbedOnStartEvent | RerankOnStartEvent
|
|
39
|
+
>;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Called when an individual step (single LLM invocation) begins.
|
|
43
|
+
* A generation may consist of multiple steps (e.g. when tool calls trigger
|
|
44
|
+
* follow-up LLM calls). Use this to create per-step spans or record
|
|
45
|
+
* step-level inputs.
|
|
46
|
+
*
|
|
47
|
+
* The event includes the step number, accumulated previous step results,
|
|
48
|
+
* and the messages that will be sent to the model.
|
|
49
|
+
*/
|
|
50
|
+
onStepStart?: Listener<OnStepStartEvent<ToolSet, Output>>;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Called when a tool execution begins, before the tool's `execute` function
|
|
54
|
+
* is invoked. Use this to create tool-level spans or log tool invocations.
|
|
55
|
+
*/
|
|
56
|
+
onToolCallStart?: Listener<OnToolCallStartEvent<ToolSet>>;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Called when a tool execution completes, either successfully or with an error.
|
|
60
|
+
* The event uses a discriminated union on the `success` field — check
|
|
61
|
+
* `event.success` to determine whether `output` or `error` is available.
|
|
62
|
+
*
|
|
63
|
+
* The event includes execution duration (`durationMs`) for performance tracking.
|
|
64
|
+
*/
|
|
65
|
+
onToolCallFinish?: Listener<OnToolCallFinishEvent<ToolSet>>;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Called for each chunk received during streaming.
|
|
69
|
+
* Only relevant for `streamText` — not called during `generateText`.
|
|
70
|
+
*/
|
|
71
|
+
onChunk?: Listener<OnChunkEvent>;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Called when an individual step (single LLM invocation) completes.
|
|
75
|
+
* The event is a `StepResult` containing the model's response, tool calls
|
|
76
|
+
* and results, usage statistics, finish reason, and optional request/response
|
|
77
|
+
* bodies.
|
|
78
|
+
*/
|
|
79
|
+
onStepFinish?: Listener<OnStepFinishEvent<ToolSet>>;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Called when an individual embedding model call (doEmbed) begins.
|
|
83
|
+
* For `embed`, there is one call. For `embedMany`, there may be multiple
|
|
84
|
+
* calls when values are chunked.
|
|
85
|
+
*/
|
|
86
|
+
onEmbedStart?: Listener<EmbedStartEvent>;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Called when an individual embedding model call (doEmbed) completes.
|
|
90
|
+
* Contains the embeddings, usage, and any warnings from the model response.
|
|
91
|
+
*/
|
|
92
|
+
onEmbedFinish?: Listener<EmbedFinishEvent>;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Called when an individual reranking model call (doRerank) begins.
|
|
96
|
+
* There is one call per `rerank` invocation.
|
|
97
|
+
*/
|
|
98
|
+
onRerankStart?: Listener<RerankStartEvent>;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Called when an individual reranking model call (doRerank) completes.
|
|
102
|
+
* Contains the ranking results from the model response.
|
|
103
|
+
*/
|
|
104
|
+
onRerankFinish?: Listener<RerankFinishEvent>;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Called when an operation completes. Fired for both text generation
|
|
108
|
+
* (generateText/streamText) and embedding (embed/embedMany) operations.
|
|
109
|
+
*
|
|
110
|
+
* Use the event shape or `operationId` to distinguish between operation types.
|
|
111
|
+
*/
|
|
112
|
+
onFinish?: Listener<
|
|
113
|
+
OnFinishEvent<ToolSet> | EmbedOnFinishEvent | RerankOnFinishEvent
|
|
114
|
+
>;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Called when an unrecoverable error occurs during the generation lifecycle.
|
|
118
|
+
* The error value is untyped — it may be an `Error` instance, an `AISDKError`,
|
|
119
|
+
* or any thrown value.
|
|
120
|
+
*
|
|
121
|
+
* Use this to record error details on telemetry spans and set error status.
|
|
122
|
+
*/
|
|
123
|
+
onError?: Listener<unknown>;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Optionally runs the tool execute function in a telemetry-integration-specific context. This enables
|
|
127
|
+
* nested traces — e.g. when a tool's `execute` function calls `generateText`,
|
|
128
|
+
* the inner call's spans become children of the tool span.
|
|
129
|
+
*
|
|
130
|
+
* @param params.callId - The call ID of the tool call.
|
|
131
|
+
* @param params.toolCallId - The tool call ID.
|
|
132
|
+
* @param params.execute - The function to execute.
|
|
133
|
+
*/
|
|
134
|
+
executeTool?: <T>(params: {
|
|
135
|
+
callId: string;
|
|
136
|
+
toolCallId: string;
|
|
137
|
+
execute: () => PromiseLike<T>;
|
|
138
|
+
}) => PromiseLike<T>;
|
|
139
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { JSONValue } from '@ai-sdk/provider';
|
|
2
|
+
import type { Tracer } from '@opentelemetry/api';
|
|
3
|
+
import type { TelemetryIntegration } from './telemetry-integration';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Telemetry configuration.
|
|
7
|
+
*/
|
|
8
|
+
// This is meant to be both flexible for custom app requirements (metadata)
|
|
9
|
+
// and extensible for standardization (example: functionId, more to come).
|
|
10
|
+
export type TelemetrySettings = {
|
|
11
|
+
/**
|
|
12
|
+
* Enable or disable telemetry. Disabled by default while experimental.
|
|
13
|
+
*/
|
|
14
|
+
isEnabled?: boolean;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Enable or disable input recording. Enabled by default.
|
|
18
|
+
*
|
|
19
|
+
* You might want to disable input recording to avoid recording sensitive
|
|
20
|
+
* information, to reduce data transfers, or to increase performance.
|
|
21
|
+
*/
|
|
22
|
+
recordInputs?: boolean;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Enable or disable output recording. Enabled by default.
|
|
26
|
+
*
|
|
27
|
+
* You might want to disable output recording to avoid recording sensitive
|
|
28
|
+
* information, to reduce data transfers, or to increase performance.
|
|
29
|
+
*/
|
|
30
|
+
recordOutputs?: boolean;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Identifier for this function. Used to group telemetry data by function.
|
|
34
|
+
*/
|
|
35
|
+
functionId?: string;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Additional information to include in the telemetry data.
|
|
39
|
+
*/
|
|
40
|
+
metadata?: Record<string, JSONValue>;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* A custom tracer to use for the telemetry data.
|
|
44
|
+
*/
|
|
45
|
+
// TODO remove tracer (all ai functions need to be updated)
|
|
46
|
+
tracer?: Tracer;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Per-call telemetry integrations that receive lifecycle events during generation.
|
|
50
|
+
*
|
|
51
|
+
* These integrations run after any globally registered integrations
|
|
52
|
+
* (see `registerTelemetryIntegration`).
|
|
53
|
+
*/
|
|
54
|
+
integrations?: TelemetryIntegration | TelemetryIntegration[];
|
|
55
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { EmbeddingModelV2 } from '@ai-sdk/provider';
|
|
2
|
+
import { notImplemented } from './not-implemented';
|
|
3
|
+
|
|
4
|
+
export class MockEmbeddingModelV2<VALUE> implements EmbeddingModelV2<VALUE> {
|
|
5
|
+
readonly specificationVersion = 'v2';
|
|
6
|
+
|
|
7
|
+
readonly provider: EmbeddingModelV2<VALUE>['provider'];
|
|
8
|
+
readonly modelId: EmbeddingModelV2<VALUE>['modelId'];
|
|
9
|
+
readonly maxEmbeddingsPerCall: EmbeddingModelV2<VALUE>['maxEmbeddingsPerCall'];
|
|
10
|
+
readonly supportsParallelCalls: EmbeddingModelV2<VALUE>['supportsParallelCalls'];
|
|
11
|
+
|
|
12
|
+
doEmbed: EmbeddingModelV2<VALUE>['doEmbed'];
|
|
13
|
+
|
|
14
|
+
constructor({
|
|
15
|
+
provider = 'mock-provider',
|
|
16
|
+
modelId = 'mock-model-id',
|
|
17
|
+
maxEmbeddingsPerCall = 1,
|
|
18
|
+
supportsParallelCalls = false,
|
|
19
|
+
doEmbed = notImplemented,
|
|
20
|
+
}: {
|
|
21
|
+
provider?: EmbeddingModelV2<VALUE>['provider'];
|
|
22
|
+
modelId?: EmbeddingModelV2<VALUE>['modelId'];
|
|
23
|
+
maxEmbeddingsPerCall?:
|
|
24
|
+
| EmbeddingModelV2<VALUE>['maxEmbeddingsPerCall']
|
|
25
|
+
| null;
|
|
26
|
+
supportsParallelCalls?: EmbeddingModelV2<VALUE>['supportsParallelCalls'];
|
|
27
|
+
doEmbed?: EmbeddingModelV2<VALUE>['doEmbed'];
|
|
28
|
+
} = {}) {
|
|
29
|
+
this.provider = provider;
|
|
30
|
+
this.modelId = modelId;
|
|
31
|
+
this.maxEmbeddingsPerCall = maxEmbeddingsPerCall ?? undefined;
|
|
32
|
+
this.supportsParallelCalls = supportsParallelCalls;
|
|
33
|
+
this.doEmbed = doEmbed;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { EmbeddingModelV3 } from '@ai-sdk/provider';
|
|
2
|
+
import { notImplemented } from './not-implemented';
|
|
3
|
+
|
|
4
|
+
export class MockEmbeddingModelV3 implements EmbeddingModelV3 {
|
|
5
|
+
readonly specificationVersion = 'v3';
|
|
6
|
+
|
|
7
|
+
readonly provider: EmbeddingModelV3['provider'];
|
|
8
|
+
readonly modelId: EmbeddingModelV3['modelId'];
|
|
9
|
+
readonly maxEmbeddingsPerCall: EmbeddingModelV3['maxEmbeddingsPerCall'];
|
|
10
|
+
readonly supportsParallelCalls: EmbeddingModelV3['supportsParallelCalls'];
|
|
11
|
+
|
|
12
|
+
doEmbed: EmbeddingModelV3['doEmbed'];
|
|
13
|
+
|
|
14
|
+
doEmbedCalls: Parameters<EmbeddingModelV3['doEmbed']>[0][] = [];
|
|
15
|
+
|
|
16
|
+
constructor({
|
|
17
|
+
provider = 'mock-provider',
|
|
18
|
+
modelId = 'mock-model-id',
|
|
19
|
+
maxEmbeddingsPerCall = 1,
|
|
20
|
+
supportsParallelCalls = false,
|
|
21
|
+
doEmbed = notImplemented,
|
|
22
|
+
}: {
|
|
23
|
+
provider?: EmbeddingModelV3['provider'];
|
|
24
|
+
modelId?: EmbeddingModelV3['modelId'];
|
|
25
|
+
maxEmbeddingsPerCall?: EmbeddingModelV3['maxEmbeddingsPerCall'] | null;
|
|
26
|
+
supportsParallelCalls?: EmbeddingModelV3['supportsParallelCalls'];
|
|
27
|
+
doEmbed?:
|
|
28
|
+
| EmbeddingModelV3['doEmbed']
|
|
29
|
+
| Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>
|
|
30
|
+
| Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>[];
|
|
31
|
+
} = {}) {
|
|
32
|
+
this.provider = provider;
|
|
33
|
+
this.modelId = modelId;
|
|
34
|
+
this.maxEmbeddingsPerCall = maxEmbeddingsPerCall ?? undefined;
|
|
35
|
+
this.supportsParallelCalls = supportsParallelCalls;
|
|
36
|
+
this.doEmbed = async options => {
|
|
37
|
+
this.doEmbedCalls.push(options);
|
|
38
|
+
|
|
39
|
+
if (typeof doEmbed === 'function') {
|
|
40
|
+
return doEmbed(options);
|
|
41
|
+
} else if (Array.isArray(doEmbed)) {
|
|
42
|
+
return doEmbed[this.doEmbedCalls.length];
|
|
43
|
+
} else {
|
|
44
|
+
return doEmbed;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { EmbeddingModelV4 } from '@ai-sdk/provider';
|
|
2
|
+
import { notImplemented } from './not-implemented';
|
|
3
|
+
|
|
4
|
+
export class MockEmbeddingModelV4 implements EmbeddingModelV4 {
|
|
5
|
+
readonly specificationVersion = 'v4';
|
|
6
|
+
|
|
7
|
+
readonly provider: EmbeddingModelV4['provider'];
|
|
8
|
+
readonly modelId: EmbeddingModelV4['modelId'];
|
|
9
|
+
readonly maxEmbeddingsPerCall: EmbeddingModelV4['maxEmbeddingsPerCall'];
|
|
10
|
+
readonly supportsParallelCalls: EmbeddingModelV4['supportsParallelCalls'];
|
|
11
|
+
|
|
12
|
+
doEmbed: EmbeddingModelV4['doEmbed'];
|
|
13
|
+
|
|
14
|
+
doEmbedCalls: Parameters<EmbeddingModelV4['doEmbed']>[0][] = [];
|
|
15
|
+
|
|
16
|
+
constructor({
|
|
17
|
+
provider = 'mock-provider',
|
|
18
|
+
modelId = 'mock-model-id',
|
|
19
|
+
maxEmbeddingsPerCall = 1,
|
|
20
|
+
supportsParallelCalls = false,
|
|
21
|
+
doEmbed = notImplemented,
|
|
22
|
+
}: {
|
|
23
|
+
provider?: EmbeddingModelV4['provider'];
|
|
24
|
+
modelId?: EmbeddingModelV4['modelId'];
|
|
25
|
+
maxEmbeddingsPerCall?: EmbeddingModelV4['maxEmbeddingsPerCall'] | null;
|
|
26
|
+
supportsParallelCalls?: EmbeddingModelV4['supportsParallelCalls'];
|
|
27
|
+
doEmbed?:
|
|
28
|
+
| EmbeddingModelV4['doEmbed']
|
|
29
|
+
| Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>
|
|
30
|
+
| Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>[];
|
|
31
|
+
} = {}) {
|
|
32
|
+
this.provider = provider;
|
|
33
|
+
this.modelId = modelId;
|
|
34
|
+
this.maxEmbeddingsPerCall = maxEmbeddingsPerCall ?? undefined;
|
|
35
|
+
this.supportsParallelCalls = supportsParallelCalls;
|
|
36
|
+
this.doEmbed = async options => {
|
|
37
|
+
this.doEmbedCalls.push(options);
|
|
38
|
+
|
|
39
|
+
if (typeof doEmbed === 'function') {
|
|
40
|
+
return doEmbed(options);
|
|
41
|
+
} else if (Array.isArray(doEmbed)) {
|
|
42
|
+
return doEmbed[this.doEmbedCalls.length];
|
|
43
|
+
} else {
|
|
44
|
+
return doEmbed;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ImageModelV2 } from '@ai-sdk/provider';
|
|
2
|
+
import { notImplemented } from './not-implemented';
|
|
3
|
+
|
|
4
|
+
export class MockImageModelV2 implements ImageModelV2 {
|
|
5
|
+
readonly specificationVersion = 'v2';
|
|
6
|
+
readonly provider: ImageModelV2['provider'];
|
|
7
|
+
readonly modelId: ImageModelV2['modelId'];
|
|
8
|
+
readonly maxImagesPerCall: ImageModelV2['maxImagesPerCall'];
|
|
9
|
+
|
|
10
|
+
doGenerate: ImageModelV2['doGenerate'];
|
|
11
|
+
|
|
12
|
+
constructor({
|
|
13
|
+
provider = 'mock-provider',
|
|
14
|
+
modelId = 'mock-model-id',
|
|
15
|
+
maxImagesPerCall = 1,
|
|
16
|
+
doGenerate = notImplemented,
|
|
17
|
+
}: {
|
|
18
|
+
provider?: ImageModelV2['provider'];
|
|
19
|
+
modelId?: ImageModelV2['modelId'];
|
|
20
|
+
maxImagesPerCall?: ImageModelV2['maxImagesPerCall'];
|
|
21
|
+
doGenerate?: ImageModelV2['doGenerate'];
|
|
22
|
+
} = {}) {
|
|
23
|
+
this.provider = provider;
|
|
24
|
+
this.modelId = modelId;
|
|
25
|
+
this.maxImagesPerCall = maxImagesPerCall;
|
|
26
|
+
this.doGenerate = doGenerate;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ImageModelV3 } from '@ai-sdk/provider';
|
|
2
|
+
import { notImplemented } from './not-implemented';
|
|
3
|
+
|
|
4
|
+
export class MockImageModelV3 implements ImageModelV3 {
|
|
5
|
+
readonly specificationVersion = 'v3';
|
|
6
|
+
readonly provider: ImageModelV3['provider'];
|
|
7
|
+
readonly modelId: ImageModelV3['modelId'];
|
|
8
|
+
readonly maxImagesPerCall: ImageModelV3['maxImagesPerCall'];
|
|
9
|
+
|
|
10
|
+
doGenerate: ImageModelV3['doGenerate'];
|
|
11
|
+
|
|
12
|
+
constructor({
|
|
13
|
+
provider = 'mock-provider',
|
|
14
|
+
modelId = 'mock-model-id',
|
|
15
|
+
maxImagesPerCall = 1,
|
|
16
|
+
doGenerate = notImplemented,
|
|
17
|
+
}: {
|
|
18
|
+
provider?: ImageModelV3['provider'];
|
|
19
|
+
modelId?: ImageModelV3['modelId'];
|
|
20
|
+
maxImagesPerCall?: ImageModelV3['maxImagesPerCall'];
|
|
21
|
+
doGenerate?: ImageModelV3['doGenerate'];
|
|
22
|
+
} = {}) {
|
|
23
|
+
this.provider = provider;
|
|
24
|
+
this.modelId = modelId;
|
|
25
|
+
this.maxImagesPerCall = maxImagesPerCall;
|
|
26
|
+
this.doGenerate = doGenerate;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ImageModelV4 } from '@ai-sdk/provider';
|
|
2
|
+
import { notImplemented } from './not-implemented';
|
|
3
|
+
|
|
4
|
+
export class MockImageModelV4 implements ImageModelV4 {
|
|
5
|
+
readonly specificationVersion = 'v4';
|
|
6
|
+
readonly provider: ImageModelV4['provider'];
|
|
7
|
+
readonly modelId: ImageModelV4['modelId'];
|
|
8
|
+
readonly maxImagesPerCall: ImageModelV4['maxImagesPerCall'];
|
|
9
|
+
|
|
10
|
+
doGenerate: ImageModelV4['doGenerate'];
|
|
11
|
+
|
|
12
|
+
constructor({
|
|
13
|
+
provider = 'mock-provider',
|
|
14
|
+
modelId = 'mock-model-id',
|
|
15
|
+
maxImagesPerCall = 1,
|
|
16
|
+
doGenerate = notImplemented,
|
|
17
|
+
}: {
|
|
18
|
+
provider?: ImageModelV4['provider'];
|
|
19
|
+
modelId?: ImageModelV4['modelId'];
|
|
20
|
+
maxImagesPerCall?: ImageModelV4['maxImagesPerCall'];
|
|
21
|
+
doGenerate?: ImageModelV4['doGenerate'];
|
|
22
|
+
} = {}) {
|
|
23
|
+
this.provider = provider;
|
|
24
|
+
this.modelId = modelId;
|
|
25
|
+
this.maxImagesPerCall = maxImagesPerCall;
|
|
26
|
+
this.doGenerate = doGenerate;
|
|
27
|
+
}
|
|
28
|
+
}
|