@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,390 @@
|
|
|
1
|
+
import type { JSONValue, LanguageModelV4ToolChoice } from '@ai-sdk/provider';
|
|
2
|
+
import type {
|
|
3
|
+
ModelMessage,
|
|
4
|
+
ProviderOptions,
|
|
5
|
+
SystemModelMessage,
|
|
6
|
+
} from '@ai-sdk/provider-utils';
|
|
7
|
+
import type { TimeoutConfiguration } from '../prompt/call-settings';
|
|
8
|
+
import type { ToolChoice } from '../types/language-model';
|
|
9
|
+
import type { LanguageModelUsage } from '../types/usage';
|
|
10
|
+
import type { Output } from './output';
|
|
11
|
+
import type { StepResult } from './step-result';
|
|
12
|
+
import type { StopCondition } from './stop-condition';
|
|
13
|
+
import type { TypedToolCall } from './tool-call';
|
|
14
|
+
import type { ToolSet } from './tool-set';
|
|
15
|
+
import { TextStreamPart } from './stream-text-result';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Event passed to the `onStart` callback.
|
|
19
|
+
*
|
|
20
|
+
* Called when the generation operation begins, before any LLM calls.
|
|
21
|
+
*/
|
|
22
|
+
export interface OnStartEvent<
|
|
23
|
+
TOOLS extends ToolSet = ToolSet,
|
|
24
|
+
OUTPUT extends Output = Output,
|
|
25
|
+
INCLUDE = { requestBody?: boolean; responseBody?: boolean },
|
|
26
|
+
> {
|
|
27
|
+
/** Unique identifier for this generation call, used to correlate events. */
|
|
28
|
+
readonly callId: string;
|
|
29
|
+
|
|
30
|
+
/** Identifies the operation type (e.g. 'ai.generateText' or 'ai.streamText'). */
|
|
31
|
+
readonly operationId: string;
|
|
32
|
+
|
|
33
|
+
/** The provider identifier (e.g., 'openai', 'anthropic'). */
|
|
34
|
+
readonly provider: string;
|
|
35
|
+
|
|
36
|
+
/** The specific model identifier (e.g., 'gpt-4o'). */
|
|
37
|
+
readonly modelId: string;
|
|
38
|
+
|
|
39
|
+
/** The system message(s) provided to the model. */
|
|
40
|
+
readonly system:
|
|
41
|
+
| string
|
|
42
|
+
| SystemModelMessage
|
|
43
|
+
| Array<SystemModelMessage>
|
|
44
|
+
| undefined;
|
|
45
|
+
|
|
46
|
+
/** The prompt string or array of messages if using the prompt option. */
|
|
47
|
+
readonly prompt: string | Array<ModelMessage> | undefined;
|
|
48
|
+
|
|
49
|
+
/** The messages array if using the messages option. */
|
|
50
|
+
readonly messages: Array<ModelMessage> | undefined;
|
|
51
|
+
|
|
52
|
+
/** The tools available for this generation. */
|
|
53
|
+
readonly tools: TOOLS | undefined;
|
|
54
|
+
|
|
55
|
+
/** The tool choice strategy for this generation. */
|
|
56
|
+
readonly toolChoice: ToolChoice<NoInfer<TOOLS>> | undefined;
|
|
57
|
+
|
|
58
|
+
/** Limits which tools are available for the model to call. */
|
|
59
|
+
readonly activeTools: Array<keyof TOOLS> | undefined;
|
|
60
|
+
|
|
61
|
+
/** Maximum number of tokens to generate. */
|
|
62
|
+
readonly maxOutputTokens: number | undefined;
|
|
63
|
+
/** Sampling temperature for generation. */
|
|
64
|
+
readonly temperature: number | undefined;
|
|
65
|
+
/** Top-p (nucleus) sampling parameter. */
|
|
66
|
+
readonly topP: number | undefined;
|
|
67
|
+
/** Top-k sampling parameter. */
|
|
68
|
+
readonly topK: number | undefined;
|
|
69
|
+
/** Presence penalty for generation. */
|
|
70
|
+
readonly presencePenalty: number | undefined;
|
|
71
|
+
/** Frequency penalty for generation. */
|
|
72
|
+
readonly frequencyPenalty: number | undefined;
|
|
73
|
+
/** Sequences that will stop generation. */
|
|
74
|
+
readonly stopSequences: string[] | undefined;
|
|
75
|
+
/** Random seed for reproducible generation. */
|
|
76
|
+
readonly seed: number | undefined;
|
|
77
|
+
/** Maximum number of retries for failed requests. */
|
|
78
|
+
readonly maxRetries: number;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Timeout configuration for the generation.
|
|
82
|
+
* Can be a number (milliseconds) or an object with totalMs, stepMs, chunkMs.
|
|
83
|
+
*/
|
|
84
|
+
readonly timeout: TimeoutConfiguration<TOOLS> | undefined;
|
|
85
|
+
|
|
86
|
+
/** Additional HTTP headers sent with the request. */
|
|
87
|
+
readonly headers: Record<string, string | undefined> | undefined;
|
|
88
|
+
|
|
89
|
+
/** Additional provider-specific options. */
|
|
90
|
+
readonly providerOptions: ProviderOptions | undefined;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Condition(s) for stopping the generation.
|
|
94
|
+
* When the condition is an array, any of the conditions can be met to stop.
|
|
95
|
+
*/
|
|
96
|
+
readonly stopWhen:
|
|
97
|
+
| StopCondition<TOOLS>
|
|
98
|
+
| Array<StopCondition<TOOLS>>
|
|
99
|
+
| undefined;
|
|
100
|
+
|
|
101
|
+
/** The output specification for structured outputs, if configured. */
|
|
102
|
+
readonly output: OUTPUT | undefined;
|
|
103
|
+
|
|
104
|
+
/** Abort signal for cancelling the operation. */
|
|
105
|
+
readonly abortSignal: AbortSignal | undefined;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Settings for controlling what data is included in step results.
|
|
109
|
+
*/
|
|
110
|
+
readonly include: INCLUDE | undefined;
|
|
111
|
+
|
|
112
|
+
/** Whether telemetry is enabled. */
|
|
113
|
+
readonly isEnabled: boolean | undefined;
|
|
114
|
+
|
|
115
|
+
/** Whether to record inputs in telemetry. Enabled by default. */
|
|
116
|
+
readonly recordInputs: boolean | undefined;
|
|
117
|
+
|
|
118
|
+
/** Whether to record outputs in telemetry. Enabled by default. */
|
|
119
|
+
readonly recordOutputs: boolean | undefined;
|
|
120
|
+
|
|
121
|
+
/** Identifier from telemetry settings for grouping related operations. */
|
|
122
|
+
readonly functionId: string | undefined;
|
|
123
|
+
|
|
124
|
+
/** Additional metadata from telemetry settings. */
|
|
125
|
+
readonly metadata: Record<string, JSONValue> | undefined;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* User-defined context object that flows through the entire generation lifecycle.
|
|
129
|
+
* Can be accessed and modified in `prepareStep` and tool `execute` functions.
|
|
130
|
+
*/
|
|
131
|
+
readonly experimental_context: unknown;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Event passed to the `onStepStart` callback.
|
|
136
|
+
*
|
|
137
|
+
* Called when a step (LLM call) begins, before the provider is called.
|
|
138
|
+
* Each step represents a single LLM invocation.
|
|
139
|
+
*/
|
|
140
|
+
export interface OnStepStartEvent<
|
|
141
|
+
TOOLS extends ToolSet = ToolSet,
|
|
142
|
+
OUTPUT extends Output = Output,
|
|
143
|
+
INCLUDE = { requestBody?: boolean; responseBody?: boolean },
|
|
144
|
+
> {
|
|
145
|
+
/** Unique identifier for this generation call, used to correlate events. */
|
|
146
|
+
readonly callId: string;
|
|
147
|
+
|
|
148
|
+
/** Zero-based index of the current step. */
|
|
149
|
+
readonly stepNumber: number;
|
|
150
|
+
|
|
151
|
+
/** The provider identifier (e.g., 'openai', 'anthropic'). */
|
|
152
|
+
readonly provider: string;
|
|
153
|
+
|
|
154
|
+
/** The specific model identifier (e.g., 'gpt-4o'). */
|
|
155
|
+
readonly modelId: string;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* The system message for this step.
|
|
159
|
+
*/
|
|
160
|
+
readonly system:
|
|
161
|
+
| string
|
|
162
|
+
| SystemModelMessage
|
|
163
|
+
| Array<SystemModelMessage>
|
|
164
|
+
| undefined;
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* The messages that will be sent to the model for this step.
|
|
168
|
+
* Uses the user-facing `ModelMessage` format.
|
|
169
|
+
* May be overridden by prepareStep.
|
|
170
|
+
*/
|
|
171
|
+
readonly messages: Array<ModelMessage>;
|
|
172
|
+
|
|
173
|
+
/** The tools available for this generation. */
|
|
174
|
+
readonly tools: TOOLS | undefined;
|
|
175
|
+
|
|
176
|
+
/** The tool choice configuration for this step. */
|
|
177
|
+
readonly toolChoice: LanguageModelV4ToolChoice | undefined;
|
|
178
|
+
|
|
179
|
+
/** Limits which tools are available for this step. */
|
|
180
|
+
readonly activeTools: Array<keyof TOOLS> | undefined;
|
|
181
|
+
|
|
182
|
+
/** Array of results from previous steps (empty for first step). */
|
|
183
|
+
readonly steps: ReadonlyArray<StepResult<TOOLS>>;
|
|
184
|
+
|
|
185
|
+
/** Additional provider-specific options for this step. */
|
|
186
|
+
readonly providerOptions: ProviderOptions | undefined;
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Timeout configuration for the generation.
|
|
190
|
+
* Can be a number (milliseconds) or an object with totalMs, stepMs, chunkMs.
|
|
191
|
+
*/
|
|
192
|
+
readonly timeout: TimeoutConfiguration<TOOLS> | undefined;
|
|
193
|
+
|
|
194
|
+
/** Additional HTTP headers sent with the request. */
|
|
195
|
+
readonly headers: Record<string, string | undefined> | undefined;
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Condition(s) for stopping the generation.
|
|
199
|
+
* When the condition is an array, any of the conditions can be met to stop.
|
|
200
|
+
*/
|
|
201
|
+
readonly stopWhen:
|
|
202
|
+
| StopCondition<TOOLS>
|
|
203
|
+
| Array<StopCondition<TOOLS>>
|
|
204
|
+
| undefined;
|
|
205
|
+
|
|
206
|
+
/** The output specification for structured outputs, if configured. */
|
|
207
|
+
readonly output: OUTPUT | undefined;
|
|
208
|
+
|
|
209
|
+
/** Abort signal for cancelling the operation. */
|
|
210
|
+
readonly abortSignal: AbortSignal | undefined;
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Settings for controlling what data is included in step results.
|
|
214
|
+
*/
|
|
215
|
+
readonly include: INCLUDE | undefined;
|
|
216
|
+
|
|
217
|
+
/** Identifier from telemetry settings for grouping related operations. */
|
|
218
|
+
readonly functionId: string | undefined;
|
|
219
|
+
|
|
220
|
+
/** Additional metadata from telemetry settings. */
|
|
221
|
+
readonly metadata: Record<string, unknown> | undefined;
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* User-defined context object. May be updated from `prepareStep` between steps.
|
|
225
|
+
*/
|
|
226
|
+
readonly experimental_context: unknown;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Event passed to the `onToolCallStart` callback.
|
|
231
|
+
*
|
|
232
|
+
* Called when a tool execution begins, before the tool's `execute` function is invoked.
|
|
233
|
+
*/
|
|
234
|
+
export interface OnToolCallStartEvent<TOOLS extends ToolSet = ToolSet> {
|
|
235
|
+
/** Unique identifier for this generation call, used to correlate events. */
|
|
236
|
+
readonly callId: string;
|
|
237
|
+
|
|
238
|
+
/** Zero-based index of the current step where this tool call occurs. */
|
|
239
|
+
readonly stepNumber: number | undefined;
|
|
240
|
+
|
|
241
|
+
/** The provider identifier (e.g., 'openai', 'anthropic'). */
|
|
242
|
+
readonly provider: string | undefined;
|
|
243
|
+
|
|
244
|
+
/** The specific model identifier (e.g., 'gpt-4o'). */
|
|
245
|
+
readonly modelId: string | undefined;
|
|
246
|
+
|
|
247
|
+
/** The full tool call object. */
|
|
248
|
+
readonly toolCall: TypedToolCall<TOOLS>;
|
|
249
|
+
|
|
250
|
+
/** The conversation messages available at tool execution time. */
|
|
251
|
+
readonly messages: Array<ModelMessage>;
|
|
252
|
+
|
|
253
|
+
/** Signal for cancelling the operation. */
|
|
254
|
+
readonly abortSignal: AbortSignal | undefined;
|
|
255
|
+
|
|
256
|
+
/** Identifier from telemetry settings for grouping related operations. */
|
|
257
|
+
readonly functionId: string | undefined;
|
|
258
|
+
|
|
259
|
+
/** Additional metadata from telemetry settings. */
|
|
260
|
+
readonly metadata: Record<string, unknown> | undefined;
|
|
261
|
+
|
|
262
|
+
/** User-defined context object flowing through the generation. */
|
|
263
|
+
readonly experimental_context: unknown;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Event passed to the `onToolCallFinish` callback.
|
|
268
|
+
*
|
|
269
|
+
* Called when a tool execution completes, either successfully or with an error.
|
|
270
|
+
* Uses a discriminated union on the `success` field.
|
|
271
|
+
*/
|
|
272
|
+
export type OnToolCallFinishEvent<TOOLS extends ToolSet = ToolSet> = {
|
|
273
|
+
/** Unique identifier for this generation call, used to correlate events. */
|
|
274
|
+
readonly callId: string;
|
|
275
|
+
|
|
276
|
+
/** Zero-based index of the current step where this tool call occurred. */
|
|
277
|
+
readonly stepNumber: number | undefined;
|
|
278
|
+
|
|
279
|
+
/** The provider identifier (e.g., 'openai', 'anthropic'). */
|
|
280
|
+
readonly provider: string | undefined;
|
|
281
|
+
|
|
282
|
+
/** The specific model identifier (e.g., 'gpt-4o'). */
|
|
283
|
+
readonly modelId: string | undefined;
|
|
284
|
+
|
|
285
|
+
/** The full tool call object. */
|
|
286
|
+
readonly toolCall: TypedToolCall<TOOLS>;
|
|
287
|
+
|
|
288
|
+
/** The conversation messages available at tool execution time. */
|
|
289
|
+
readonly messages: Array<ModelMessage>;
|
|
290
|
+
|
|
291
|
+
/** Signal for cancelling the operation. */
|
|
292
|
+
readonly abortSignal: AbortSignal | undefined;
|
|
293
|
+
|
|
294
|
+
/** Execution time of the tool call in milliseconds. */
|
|
295
|
+
readonly durationMs: number;
|
|
296
|
+
|
|
297
|
+
/** Identifier from telemetry settings for grouping related operations. */
|
|
298
|
+
readonly functionId: string | undefined;
|
|
299
|
+
|
|
300
|
+
/** Additional metadata from telemetry settings. */
|
|
301
|
+
readonly metadata: Record<string, unknown> | undefined;
|
|
302
|
+
|
|
303
|
+
/** User-defined context object flowing through the generation. */
|
|
304
|
+
readonly experimental_context: unknown;
|
|
305
|
+
} & (
|
|
306
|
+
| {
|
|
307
|
+
/** Indicates the tool call succeeded. */
|
|
308
|
+
readonly success: true;
|
|
309
|
+
/** The tool's return value. */
|
|
310
|
+
readonly output: unknown;
|
|
311
|
+
readonly error?: never;
|
|
312
|
+
}
|
|
313
|
+
| {
|
|
314
|
+
/** Indicates the tool call failed. */
|
|
315
|
+
readonly success: false;
|
|
316
|
+
readonly output?: never;
|
|
317
|
+
/** The error that occurred during tool execution. */
|
|
318
|
+
readonly error: unknown;
|
|
319
|
+
}
|
|
320
|
+
);
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Event passed to the `onChunk` callback.
|
|
324
|
+
*
|
|
325
|
+
* Called for each chunk received during streaming (`streamText` only).
|
|
326
|
+
* The chunk is either a content part (text-delta, tool-call, etc.) or
|
|
327
|
+
* a stream lifecycle marker (`ai.stream.firstChunk` / `ai.stream.finish`).
|
|
328
|
+
*/
|
|
329
|
+
export interface OnChunkEvent<TOOLS extends ToolSet = ToolSet> {
|
|
330
|
+
readonly chunk:
|
|
331
|
+
| Extract<
|
|
332
|
+
TextStreamPart<TOOLS>,
|
|
333
|
+
{
|
|
334
|
+
type:
|
|
335
|
+
| 'text-delta'
|
|
336
|
+
| 'reasoning-delta'
|
|
337
|
+
| 'source'
|
|
338
|
+
| 'tool-call'
|
|
339
|
+
| 'tool-input-start'
|
|
340
|
+
| 'tool-input-delta'
|
|
341
|
+
| 'tool-result'
|
|
342
|
+
| 'raw';
|
|
343
|
+
}
|
|
344
|
+
>
|
|
345
|
+
| {
|
|
346
|
+
readonly type: 'ai.stream.firstChunk' | 'ai.stream.finish';
|
|
347
|
+
readonly callId: string;
|
|
348
|
+
readonly stepNumber: number;
|
|
349
|
+
readonly attributes?: Record<string, unknown>;
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Event passed to the `onStepFinish` callback.
|
|
355
|
+
*
|
|
356
|
+
* Called when a step (LLM call) completes.
|
|
357
|
+
* Includes the StepResult for that step along with the call identifier.
|
|
358
|
+
*/
|
|
359
|
+
export type OnStepFinishEvent<TOOLS extends ToolSet = ToolSet> =
|
|
360
|
+
StepResult<TOOLS>;
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Event passed to the `onFinish` callback.
|
|
364
|
+
*
|
|
365
|
+
* Called when the entire generation completes (all steps finished).
|
|
366
|
+
* Includes the final step's result along with aggregated data from all steps.
|
|
367
|
+
*/
|
|
368
|
+
export type OnFinishEvent<TOOLS extends ToolSet = ToolSet> =
|
|
369
|
+
StepResult<TOOLS> & {
|
|
370
|
+
/** Array containing results from all steps in the generation. */
|
|
371
|
+
readonly steps: StepResult<TOOLS>[];
|
|
372
|
+
|
|
373
|
+
/** Aggregated token usage across all steps. */
|
|
374
|
+
readonly totalUsage: LanguageModelUsage;
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* The final state of the user-defined context object.
|
|
378
|
+
*
|
|
379
|
+
* Experimental (can break in patch releases).
|
|
380
|
+
*
|
|
381
|
+
* @default undefined
|
|
382
|
+
*/
|
|
383
|
+
experimental_context: unknown;
|
|
384
|
+
|
|
385
|
+
/** Identifier from telemetry settings for grouping related operations. */
|
|
386
|
+
readonly functionId: string | undefined;
|
|
387
|
+
|
|
388
|
+
/** Additional metadata from telemetry settings. */
|
|
389
|
+
readonly metadata: Record<string, unknown> | undefined;
|
|
390
|
+
};
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { IdGenerator, ModelMessage } from '@ai-sdk/provider-utils';
|
|
2
|
+
import { TimeoutConfiguration } from '../prompt/call-settings';
|
|
3
|
+
import type { TelemetryIntegration } from '../telemetry/telemetry-integration';
|
|
4
|
+
import { TelemetrySettings } from '../telemetry/telemetry-settings';
|
|
5
|
+
import { executeToolCall } from './execute-tool-call';
|
|
6
|
+
import { isApprovalNeeded } from './is-approval-needed';
|
|
7
|
+
import {
|
|
8
|
+
StreamTextOnToolCallFinishCallback,
|
|
9
|
+
StreamTextOnToolCallStartCallback,
|
|
10
|
+
} from './stream-text';
|
|
11
|
+
import { TypedToolCall } from './tool-call';
|
|
12
|
+
import { ToolSet } from './tool-set';
|
|
13
|
+
import { ModelCallStreamPart } from './stream-model-call';
|
|
14
|
+
|
|
15
|
+
export function createExecuteToolsTransformation<TOOLS extends ToolSet>({
|
|
16
|
+
tools,
|
|
17
|
+
telemetry,
|
|
18
|
+
callId,
|
|
19
|
+
messages,
|
|
20
|
+
abortSignal,
|
|
21
|
+
timeout,
|
|
22
|
+
experimental_context,
|
|
23
|
+
generateId,
|
|
24
|
+
stepNumber,
|
|
25
|
+
provider,
|
|
26
|
+
modelId,
|
|
27
|
+
onToolCallStart,
|
|
28
|
+
onToolCallFinish,
|
|
29
|
+
executeToolInTelemetryContext,
|
|
30
|
+
}: {
|
|
31
|
+
tools: TOOLS | undefined;
|
|
32
|
+
telemetry: TelemetrySettings | undefined;
|
|
33
|
+
callId: string;
|
|
34
|
+
messages: ModelMessage[];
|
|
35
|
+
abortSignal: AbortSignal | undefined;
|
|
36
|
+
timeout?: TimeoutConfiguration<TOOLS>;
|
|
37
|
+
experimental_context: unknown;
|
|
38
|
+
generateId: IdGenerator;
|
|
39
|
+
stepNumber?: number;
|
|
40
|
+
provider?: string;
|
|
41
|
+
modelId?: string;
|
|
42
|
+
onToolCallStart?:
|
|
43
|
+
| StreamTextOnToolCallStartCallback<TOOLS>
|
|
44
|
+
| Array<StreamTextOnToolCallStartCallback<TOOLS> | undefined | null>;
|
|
45
|
+
onToolCallFinish?:
|
|
46
|
+
| StreamTextOnToolCallFinishCallback<TOOLS>
|
|
47
|
+
| Array<StreamTextOnToolCallFinishCallback<TOOLS> | undefined | null>;
|
|
48
|
+
executeToolInTelemetryContext?: TelemetryIntegration['executeTool'];
|
|
49
|
+
}): TransformStream<ModelCallStreamPart<TOOLS>, ModelCallStreamPart<TOOLS>> {
|
|
50
|
+
const toolCallsToExecute: Array<TypedToolCall<TOOLS>> = [];
|
|
51
|
+
|
|
52
|
+
// forward stream
|
|
53
|
+
return new TransformStream<
|
|
54
|
+
ModelCallStreamPart<TOOLS>,
|
|
55
|
+
ModelCallStreamPart<TOOLS>
|
|
56
|
+
>({
|
|
57
|
+
async transform(
|
|
58
|
+
chunk: ModelCallStreamPart<TOOLS>,
|
|
59
|
+
controller: TransformStreamDefaultController<ModelCallStreamPart<TOOLS>>,
|
|
60
|
+
) {
|
|
61
|
+
// immediately forward all chunks
|
|
62
|
+
controller.enqueue(chunk);
|
|
63
|
+
|
|
64
|
+
const chunkType = chunk.type;
|
|
65
|
+
switch (chunkType) {
|
|
66
|
+
case 'tool-call': {
|
|
67
|
+
if (chunk.invalid) {
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const tool = tools?.[chunk.toolName];
|
|
72
|
+
|
|
73
|
+
if (tool == null) {
|
|
74
|
+
// ignore tool calls for tools that are not available,
|
|
75
|
+
// e.g. provider-executed dynamic tools
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (
|
|
80
|
+
await isApprovalNeeded({
|
|
81
|
+
tool,
|
|
82
|
+
toolCall: chunk,
|
|
83
|
+
messages,
|
|
84
|
+
experimental_context,
|
|
85
|
+
})
|
|
86
|
+
) {
|
|
87
|
+
controller.enqueue({
|
|
88
|
+
type: 'tool-approval-request',
|
|
89
|
+
approvalId: generateId(),
|
|
90
|
+
toolCall: chunk,
|
|
91
|
+
});
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Only execute tools that are not provider-executed:
|
|
96
|
+
if (tool.execute != null && chunk.providerExecuted !== true) {
|
|
97
|
+
toolCallsToExecute.push(chunk);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
case 'model-call-end': {
|
|
104
|
+
await Promise.all(
|
|
105
|
+
toolCallsToExecute.map(async toolCall => {
|
|
106
|
+
try {
|
|
107
|
+
// Note: we don't await the tool execution here (by leaving out 'await' on recordSpan),
|
|
108
|
+
// because we want to process the next chunk as soon as possible.
|
|
109
|
+
// This is important for the case where the tool execution takes a long time.
|
|
110
|
+
const result = await executeToolCall({
|
|
111
|
+
toolCall,
|
|
112
|
+
tools,
|
|
113
|
+
telemetry,
|
|
114
|
+
callId,
|
|
115
|
+
messages,
|
|
116
|
+
abortSignal,
|
|
117
|
+
timeout,
|
|
118
|
+
experimental_context,
|
|
119
|
+
stepNumber,
|
|
120
|
+
provider,
|
|
121
|
+
modelId,
|
|
122
|
+
onToolCallStart,
|
|
123
|
+
onToolCallFinish,
|
|
124
|
+
executeToolInTelemetryContext,
|
|
125
|
+
onPreliminaryToolResult: result => {
|
|
126
|
+
controller.enqueue(result);
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
controller.enqueue(result);
|
|
130
|
+
} catch (error) {
|
|
131
|
+
controller.enqueue({
|
|
132
|
+
type: 'error',
|
|
133
|
+
error,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}),
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
}
|