@depup/ai 6.0.116-depup.0
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 +7350 -0
- package/LICENSE +13 -0
- package/README.md +25 -0
- package/changes.json +5 -0
- package/dist/index.d.mts +6429 -0
- package/dist/index.d.ts +6429 -0
- package/dist/index.js +13548 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +13514 -0
- package/dist/index.mjs.map +1 -0
- package/dist/internal/index.d.mts +314 -0
- package/dist/internal/index.d.ts +314 -0
- package/dist/internal/index.js +1316 -0
- package/dist/internal/index.js.map +1 -0
- package/dist/internal/index.mjs +1300 -0
- package/dist/internal/index.mjs.map +1 -0
- package/dist/test/index.d.mts +133 -0
- package/dist/test/index.d.ts +133 -0
- package/dist/test/index.js +275 -0
- package/dist/test/index.js.map +1 -0
- package/dist/test/index.mjs +245 -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 +156 -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 +337 -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 +1144 -0
- package/docs/03-ai-sdk-core/16-mcp-tools.mdx +377 -0
- package/docs/03-ai-sdk-core/20-prompt-engineering.mdx +146 -0
- package/docs/03-ai-sdk-core/25-settings.mdx +198 -0
- package/docs/03-ai-sdk-core/30-embeddings.mdx +245 -0
- package/docs/03-ai-sdk-core/31-reranking.mdx +218 -0
- package/docs/03-ai-sdk-core/35-image-generation.mdx +342 -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 +915 -0
- package/docs/03-ai-sdk-core/index.mdx +93 -0
- package/docs/04-ai-sdk-ui/01-overview.mdx +44 -0
- package/docs/04-ai-sdk-ui/02-chatbot.mdx +1313 -0
- package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +535 -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 +477 -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 +2715 -0
- package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +3656 -0
- package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +197 -0
- package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +191 -0
- package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +309 -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 +416 -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 +415 -0
- package/docs/07-reference/01-ai-sdk-core/31-ui-message.mdx +246 -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/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 +126 -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 +244 -0
- package/src/agent/tool-loop-agent.ts +206 -0
- package/src/embed/embed-many-result.ts +53 -0
- package/src/embed/embed-many.ts +386 -0
- package/src/embed/embed-result.ts +50 -0
- package/src/embed/embed.ts +217 -0
- package/src/embed/index.ts +4 -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 +517 -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 +985 -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/callback-events.ts +332 -0
- package/src/generate-text/collect-tool-approvals.ts +116 -0
- package/src/generate-text/content-part.ts +25 -0
- package/src/generate-text/execute-tool-call.ts +197 -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 +1535 -0
- package/src/generate-text/generated-file.ts +70 -0
- package/src/generate-text/index.ts +74 -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 +20 -0
- package/src/generate-text/reasoning.ts +8 -0
- package/src/generate-text/response-message.ts +10 -0
- package/src/generate-text/run-tools-transformation.ts +442 -0
- package/src/generate-text/smooth-stream.ts +162 -0
- package/src/generate-text/step-result.ts +290 -0
- package/src/generate-text/stop-condition.ts +29 -0
- package/src/generate-text/stream-text-result.ts +463 -0
- package/src/generate-text/stream-text.ts +2807 -0
- package/src/generate-text/to-response-messages.ts +163 -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 +86 -0
- package/src/middleware/wrap-image-model.ts +85 -0
- package/src/middleware/wrap-language-model.ts +104 -0
- package/src/middleware/wrap-provider.ts +51 -0
- package/src/model/as-embedding-model-v3.ts +24 -0
- package/src/model/as-image-model-v3.ts +24 -0
- package/src/model/as-language-model-v3.ts +103 -0
- package/src/model/as-provider-v3.ts +36 -0
- package/src/model/as-speech-model-v3.ts +24 -0
- package/src/model/as-transcription-model-v3.ts +24 -0
- package/src/model/resolve-model.ts +159 -0
- package/src/prompt/call-settings.ts +148 -0
- package/src/prompt/content-part.ts +215 -0
- package/src/prompt/convert-to-language-model-prompt.ts +526 -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 +68 -0
- package/src/prompt/prepare-call-settings.ts +108 -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 +176 -0
- package/src/registry/index.ts +7 -0
- package/src/registry/no-such-provider-error.ts +41 -0
- package/src/registry/provider-registry.ts +328 -0
- package/src/rerank/index.ts +2 -0
- package/src/rerank/rerank-result.ts +70 -0
- package/src/rerank/rerank.ts +239 -0
- package/src/telemetry/assemble-operation-name.ts +21 -0
- package/src/telemetry/get-base-telemetry-attributes.ts +53 -0
- package/src/telemetry/get-global-telemetry-integration.ts +85 -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/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 +17 -0
- package/src/telemetry/telemetry-integration.ts +24 -0
- package/src/telemetry/telemetry-settings.ts +53 -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-image-model-v2.ts +28 -0
- package/src/test/mock-image-model-v3.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-provider-v2.ts +68 -0
- package/src/test/mock-provider-v3.ts +80 -0
- package/src/test/mock-reranking-model-v3.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-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-values.ts +4 -0
- package/src/test/mock-video-model-v3.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 +3 -0
- package/src/types/embedding-model.ts +18 -0
- package/src/types/image-model-middleware.ts +3 -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 +3 -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 +104 -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 +6 -0
- package/src/types/transcription-model-response-metadata.ts +16 -0
- package/src/types/transcription-model.ts +9 -0
- package/src/types/usage.ts +200 -0
- package/src/types/video-model-response-metadata.ts +28 -0
- package/src/types/video-model.ts +11 -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 +751 -0
- package/src/ui/convert-file-list-to-file-ui-parts.ts +36 -0
- package/src/ui/convert-to-model-messages.ts +376 -0
- package/src/ui/default-chat-transport.ts +36 -0
- package/src/ui/direct-chat-transport.ts +118 -0
- package/src/ui/http-chat-transport.ts +284 -0
- package/src/ui/index.ts +71 -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 +793 -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 +536 -0
- package/src/ui/use-completion.ts +84 -0
- package/src/ui/validate-ui-messages.ts +506 -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 +346 -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 +69 -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,332 @@
|
|
|
1
|
+
import type { LanguageModelV3ToolChoice } 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
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Common model information used across callback events.
|
|
18
|
+
*/
|
|
19
|
+
export interface CallbackModelInfo {
|
|
20
|
+
/** The provider identifier (e.g., 'openai', 'anthropic'). */
|
|
21
|
+
readonly provider: string;
|
|
22
|
+
/** The specific model identifier (e.g., 'gpt-4o'). */
|
|
23
|
+
readonly modelId: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Event passed to the `onStart` callback.
|
|
28
|
+
*
|
|
29
|
+
* Called when the generation operation begins, before any LLM calls.
|
|
30
|
+
*/
|
|
31
|
+
export interface OnStartEvent<
|
|
32
|
+
TOOLS extends ToolSet = ToolSet,
|
|
33
|
+
OUTPUT extends Output = Output,
|
|
34
|
+
INCLUDE = { requestBody?: boolean; responseBody?: boolean },
|
|
35
|
+
> {
|
|
36
|
+
/** The model being used for generation. */
|
|
37
|
+
readonly model: CallbackModelInfo;
|
|
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 | 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
|
+
/** Identifier from telemetry settings for grouping related operations. */
|
|
113
|
+
readonly functionId: string | undefined;
|
|
114
|
+
|
|
115
|
+
/** Additional metadata passed to the generation. */
|
|
116
|
+
readonly metadata: Record<string, unknown> | undefined;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* User-defined context object that flows through the entire generation lifecycle.
|
|
120
|
+
* Can be accessed and modified in `prepareStep` and tool `execute` functions.
|
|
121
|
+
*/
|
|
122
|
+
readonly experimental_context: unknown;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Event passed to the `onStepStart` callback.
|
|
127
|
+
*
|
|
128
|
+
* Called when a step (LLM call) begins, before the provider is called.
|
|
129
|
+
* Each step represents a single LLM invocation.
|
|
130
|
+
*/
|
|
131
|
+
export interface OnStepStartEvent<
|
|
132
|
+
TOOLS extends ToolSet = ToolSet,
|
|
133
|
+
OUTPUT extends Output = Output,
|
|
134
|
+
INCLUDE = { requestBody?: boolean; responseBody?: boolean },
|
|
135
|
+
> {
|
|
136
|
+
/** Zero-based index of the current step. */
|
|
137
|
+
readonly stepNumber: number;
|
|
138
|
+
|
|
139
|
+
/** The model being used for this step. */
|
|
140
|
+
readonly model: CallbackModelInfo;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* The system message for this step.
|
|
144
|
+
*/
|
|
145
|
+
readonly system:
|
|
146
|
+
| string
|
|
147
|
+
| SystemModelMessage
|
|
148
|
+
| Array<SystemModelMessage>
|
|
149
|
+
| undefined;
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* The messages that will be sent to the model for this step.
|
|
153
|
+
* Uses the user-facing `ModelMessage` format.
|
|
154
|
+
* May be overridden by prepareStep.
|
|
155
|
+
*/
|
|
156
|
+
readonly messages: Array<ModelMessage>;
|
|
157
|
+
|
|
158
|
+
/** The tools available for this generation. */
|
|
159
|
+
readonly tools: TOOLS | undefined;
|
|
160
|
+
|
|
161
|
+
/** The tool choice configuration for this step. */
|
|
162
|
+
readonly toolChoice: LanguageModelV3ToolChoice | undefined;
|
|
163
|
+
|
|
164
|
+
/** Limits which tools are available for this step. */
|
|
165
|
+
readonly activeTools: Array<keyof TOOLS> | undefined;
|
|
166
|
+
|
|
167
|
+
/** Array of results from previous steps (empty for first step). */
|
|
168
|
+
readonly steps: ReadonlyArray<StepResult<TOOLS>>;
|
|
169
|
+
|
|
170
|
+
/** Additional provider-specific options for this step. */
|
|
171
|
+
readonly providerOptions: ProviderOptions | undefined;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Timeout configuration for the generation.
|
|
175
|
+
* Can be a number (milliseconds) or an object with totalMs, stepMs, chunkMs.
|
|
176
|
+
*/
|
|
177
|
+
readonly timeout: TimeoutConfiguration | undefined;
|
|
178
|
+
|
|
179
|
+
/** Additional HTTP headers sent with the request. */
|
|
180
|
+
readonly headers: Record<string, string | undefined> | undefined;
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Condition(s) for stopping the generation.
|
|
184
|
+
* When the condition is an array, any of the conditions can be met to stop.
|
|
185
|
+
*/
|
|
186
|
+
readonly stopWhen:
|
|
187
|
+
| StopCondition<TOOLS>
|
|
188
|
+
| Array<StopCondition<TOOLS>>
|
|
189
|
+
| undefined;
|
|
190
|
+
|
|
191
|
+
/** The output specification for structured outputs, if configured. */
|
|
192
|
+
readonly output: OUTPUT | undefined;
|
|
193
|
+
|
|
194
|
+
/** Abort signal for cancelling the operation. */
|
|
195
|
+
readonly abortSignal: AbortSignal | undefined;
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Settings for controlling what data is included in step results.
|
|
199
|
+
*/
|
|
200
|
+
readonly include: INCLUDE | undefined;
|
|
201
|
+
|
|
202
|
+
/** Identifier from telemetry settings for grouping related operations. */
|
|
203
|
+
readonly functionId: string | undefined;
|
|
204
|
+
|
|
205
|
+
/** Additional metadata from telemetry settings. */
|
|
206
|
+
readonly metadata: Record<string, unknown> | undefined;
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* User-defined context object. May be updated from `prepareStep` between steps.
|
|
210
|
+
*/
|
|
211
|
+
readonly experimental_context: unknown;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Event passed to the `onToolCallStart` callback.
|
|
216
|
+
*
|
|
217
|
+
* Called when a tool execution begins, before the tool's `execute` function is invoked.
|
|
218
|
+
*/
|
|
219
|
+
export interface OnToolCallStartEvent<TOOLS extends ToolSet = ToolSet> {
|
|
220
|
+
/** Zero-based index of the current step where this tool call occurs. */
|
|
221
|
+
readonly stepNumber: number | undefined;
|
|
222
|
+
|
|
223
|
+
/** The model being used for this step. */
|
|
224
|
+
readonly model: CallbackModelInfo | undefined;
|
|
225
|
+
|
|
226
|
+
/** The full tool call object. */
|
|
227
|
+
readonly toolCall: TypedToolCall<TOOLS>;
|
|
228
|
+
|
|
229
|
+
/** The conversation messages available at tool execution time. */
|
|
230
|
+
readonly messages: Array<ModelMessage>;
|
|
231
|
+
|
|
232
|
+
/** Signal for cancelling the operation. */
|
|
233
|
+
readonly abortSignal: AbortSignal | undefined;
|
|
234
|
+
|
|
235
|
+
/** Identifier from telemetry settings for grouping related operations. */
|
|
236
|
+
readonly functionId: string | undefined;
|
|
237
|
+
|
|
238
|
+
/** Additional metadata from telemetry settings. */
|
|
239
|
+
readonly metadata: Record<string, unknown> | undefined;
|
|
240
|
+
|
|
241
|
+
/** User-defined context object flowing through the generation. */
|
|
242
|
+
readonly experimental_context: unknown;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Event passed to the `onToolCallFinish` callback.
|
|
247
|
+
*
|
|
248
|
+
* Called when a tool execution completes, either successfully or with an error.
|
|
249
|
+
* Uses a discriminated union on the `success` field.
|
|
250
|
+
*/
|
|
251
|
+
export type OnToolCallFinishEvent<TOOLS extends ToolSet = ToolSet> = {
|
|
252
|
+
/** Zero-based index of the current step where this tool call occurred. */
|
|
253
|
+
readonly stepNumber: number | undefined;
|
|
254
|
+
|
|
255
|
+
/** The model being used for this step. */
|
|
256
|
+
readonly model: CallbackModelInfo | undefined;
|
|
257
|
+
|
|
258
|
+
/** The full tool call object. */
|
|
259
|
+
readonly toolCall: TypedToolCall<TOOLS>;
|
|
260
|
+
|
|
261
|
+
/** The conversation messages available at tool execution time. */
|
|
262
|
+
readonly messages: Array<ModelMessage>;
|
|
263
|
+
|
|
264
|
+
/** Signal for cancelling the operation. */
|
|
265
|
+
readonly abortSignal: AbortSignal | undefined;
|
|
266
|
+
|
|
267
|
+
/** Execution time of the tool call in milliseconds. */
|
|
268
|
+
readonly durationMs: number;
|
|
269
|
+
|
|
270
|
+
/** Identifier from telemetry settings for grouping related operations. */
|
|
271
|
+
readonly functionId: string | undefined;
|
|
272
|
+
|
|
273
|
+
/** Additional metadata from telemetry settings. */
|
|
274
|
+
readonly metadata: Record<string, unknown> | undefined;
|
|
275
|
+
|
|
276
|
+
/** User-defined context object flowing through the generation. */
|
|
277
|
+
readonly experimental_context: unknown;
|
|
278
|
+
} & (
|
|
279
|
+
| {
|
|
280
|
+
/** Indicates the tool call succeeded. */
|
|
281
|
+
readonly success: true;
|
|
282
|
+
/** The tool's return value. */
|
|
283
|
+
readonly output: unknown;
|
|
284
|
+
readonly error?: never;
|
|
285
|
+
}
|
|
286
|
+
| {
|
|
287
|
+
/** Indicates the tool call failed. */
|
|
288
|
+
readonly success: false;
|
|
289
|
+
readonly output?: never;
|
|
290
|
+
/** The error that occurred during tool execution. */
|
|
291
|
+
readonly error: unknown;
|
|
292
|
+
}
|
|
293
|
+
);
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Event passed to the `onStepFinish` callback.
|
|
297
|
+
*
|
|
298
|
+
* Called when a step (LLM call) completes.
|
|
299
|
+
* This is simply the StepResult for that step.
|
|
300
|
+
*/
|
|
301
|
+
export type OnStepFinishEvent<TOOLS extends ToolSet = ToolSet> =
|
|
302
|
+
StepResult<TOOLS>;
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Event passed to the `onFinish` callback.
|
|
306
|
+
*
|
|
307
|
+
* Called when the entire generation completes (all steps finished).
|
|
308
|
+
* Includes the final step's result along with aggregated data from all steps.
|
|
309
|
+
*/
|
|
310
|
+
export type OnFinishEvent<TOOLS extends ToolSet = ToolSet> =
|
|
311
|
+
StepResult<TOOLS> & {
|
|
312
|
+
/** Array containing results from all steps in the generation. */
|
|
313
|
+
readonly steps: StepResult<TOOLS>[];
|
|
314
|
+
|
|
315
|
+
/** Aggregated token usage across all steps. */
|
|
316
|
+
readonly totalUsage: LanguageModelUsage;
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* The final state of the user-defined context object.
|
|
320
|
+
*
|
|
321
|
+
* Experimental (can break in patch releases).
|
|
322
|
+
*
|
|
323
|
+
* @default undefined
|
|
324
|
+
*/
|
|
325
|
+
experimental_context: unknown;
|
|
326
|
+
|
|
327
|
+
/** Identifier from telemetry settings for grouping related operations. */
|
|
328
|
+
readonly functionId: string | undefined;
|
|
329
|
+
|
|
330
|
+
/** Additional metadata from telemetry settings. */
|
|
331
|
+
readonly metadata: Record<string, unknown> | undefined;
|
|
332
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ModelMessage,
|
|
3
|
+
ToolApprovalRequest,
|
|
4
|
+
ToolApprovalResponse,
|
|
5
|
+
} from '@ai-sdk/provider-utils';
|
|
6
|
+
import { InvalidToolApprovalError } from '../error/invalid-tool-approval-error';
|
|
7
|
+
import { ToolCallNotFoundForApprovalError } from '../error/tool-call-not-found-for-approval-error';
|
|
8
|
+
import { TypedToolCall } from './tool-call';
|
|
9
|
+
import { TypedToolResult } from './tool-result';
|
|
10
|
+
import { ToolSet } from './tool-set';
|
|
11
|
+
|
|
12
|
+
export type CollectedToolApprovals<TOOLS extends ToolSet> = {
|
|
13
|
+
approvalRequest: ToolApprovalRequest;
|
|
14
|
+
approvalResponse: ToolApprovalResponse;
|
|
15
|
+
toolCall: TypedToolCall<TOOLS>;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* If the last message is a tool message, this function collects all tool approvals
|
|
20
|
+
* from that message.
|
|
21
|
+
*/
|
|
22
|
+
export function collectToolApprovals<TOOLS extends ToolSet>({
|
|
23
|
+
messages,
|
|
24
|
+
}: {
|
|
25
|
+
messages: ModelMessage[];
|
|
26
|
+
}): {
|
|
27
|
+
approvedToolApprovals: Array<CollectedToolApprovals<TOOLS>>;
|
|
28
|
+
deniedToolApprovals: Array<CollectedToolApprovals<TOOLS>>;
|
|
29
|
+
} {
|
|
30
|
+
const lastMessage = messages.at(-1);
|
|
31
|
+
|
|
32
|
+
if (lastMessage?.role != 'tool') {
|
|
33
|
+
return {
|
|
34
|
+
approvedToolApprovals: [],
|
|
35
|
+
deniedToolApprovals: [],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// gather tool calls and prepare lookup
|
|
40
|
+
const toolCallsByToolCallId: Record<string, TypedToolCall<TOOLS>> = {};
|
|
41
|
+
for (const message of messages) {
|
|
42
|
+
if (message.role === 'assistant' && typeof message.content !== 'string') {
|
|
43
|
+
const content = message.content;
|
|
44
|
+
for (const part of content) {
|
|
45
|
+
if (part.type === 'tool-call') {
|
|
46
|
+
toolCallsByToolCallId[part.toolCallId] = part as TypedToolCall<TOOLS>;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// gather approval responses and prepare lookup
|
|
53
|
+
const toolApprovalRequestsByApprovalId: Record<string, ToolApprovalRequest> =
|
|
54
|
+
{};
|
|
55
|
+
for (const message of messages) {
|
|
56
|
+
if (message.role === 'assistant' && typeof message.content !== 'string') {
|
|
57
|
+
const content = message.content;
|
|
58
|
+
for (const part of content) {
|
|
59
|
+
if (part.type === 'tool-approval-request') {
|
|
60
|
+
toolApprovalRequestsByApprovalId[part.approvalId] = part;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// gather tool results from the last tool message
|
|
67
|
+
const toolResults: Record<string, TypedToolResult<TOOLS>> = {};
|
|
68
|
+
for (const part of lastMessage.content) {
|
|
69
|
+
if (part.type === 'tool-result') {
|
|
70
|
+
toolResults[part.toolCallId] = part as TypedToolResult<TOOLS>;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const approvedToolApprovals: Array<CollectedToolApprovals<TOOLS>> = [];
|
|
75
|
+
const deniedToolApprovals: Array<CollectedToolApprovals<TOOLS>> = [];
|
|
76
|
+
|
|
77
|
+
const approvalResponses = lastMessage.content.filter(
|
|
78
|
+
part => part.type === 'tool-approval-response',
|
|
79
|
+
);
|
|
80
|
+
for (const approvalResponse of approvalResponses) {
|
|
81
|
+
const approvalRequest =
|
|
82
|
+
toolApprovalRequestsByApprovalId[approvalResponse.approvalId];
|
|
83
|
+
|
|
84
|
+
if (approvalRequest == null) {
|
|
85
|
+
throw new InvalidToolApprovalError({
|
|
86
|
+
approvalId: approvalResponse.approvalId,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (toolResults[approvalRequest.toolCallId] != null) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const toolCall = toolCallsByToolCallId[approvalRequest.toolCallId];
|
|
95
|
+
if (toolCall == null) {
|
|
96
|
+
throw new ToolCallNotFoundForApprovalError({
|
|
97
|
+
toolCallId: approvalRequest.toolCallId,
|
|
98
|
+
approvalId: approvalRequest.approvalId,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const approval: CollectedToolApprovals<TOOLS> = {
|
|
103
|
+
approvalRequest,
|
|
104
|
+
approvalResponse,
|
|
105
|
+
toolCall,
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
if (approvalResponse.approved) {
|
|
109
|
+
approvedToolApprovals.push(approval);
|
|
110
|
+
} else {
|
|
111
|
+
deniedToolApprovals.push(approval);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return { approvedToolApprovals, deniedToolApprovals };
|
|
116
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ProviderMetadata } from '../types';
|
|
2
|
+
import { Source } from '../types/language-model';
|
|
3
|
+
import { GeneratedFile } from './generated-file';
|
|
4
|
+
import { ToolApprovalRequestOutput } from './tool-approval-request-output';
|
|
5
|
+
import { ReasoningOutput } from './reasoning-output';
|
|
6
|
+
import { TypedToolCall } from './tool-call';
|
|
7
|
+
import { TypedToolError } from './tool-error';
|
|
8
|
+
import { TypedToolResult } from './tool-result';
|
|
9
|
+
import { ToolSet } from './tool-set';
|
|
10
|
+
|
|
11
|
+
export type ContentPart<TOOLS extends ToolSet> =
|
|
12
|
+
| { type: 'text'; text: string; providerMetadata?: ProviderMetadata }
|
|
13
|
+
| ReasoningOutput
|
|
14
|
+
| ({ type: 'source' } & Source)
|
|
15
|
+
| { type: 'file'; file: GeneratedFile; providerMetadata?: ProviderMetadata } // different because of GeneratedFile object
|
|
16
|
+
| ({ type: 'tool-call' } & TypedToolCall<TOOLS> & {
|
|
17
|
+
providerMetadata?: ProviderMetadata;
|
|
18
|
+
})
|
|
19
|
+
| ({ type: 'tool-result' } & TypedToolResult<TOOLS> & {
|
|
20
|
+
providerMetadata?: ProviderMetadata;
|
|
21
|
+
})
|
|
22
|
+
| ({ type: 'tool-error' } & TypedToolError<TOOLS> & {
|
|
23
|
+
providerMetadata?: ProviderMetadata;
|
|
24
|
+
})
|
|
25
|
+
| ToolApprovalRequestOutput<TOOLS>;
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { executeTool, ModelMessage } from '@ai-sdk/provider-utils';
|
|
2
|
+
import { Tracer } from '@opentelemetry/api';
|
|
3
|
+
import { notify } from '../util/notify';
|
|
4
|
+
import { assembleOperationName } from '../telemetry/assemble-operation-name';
|
|
5
|
+
import { recordErrorOnSpan, recordSpan } from '../telemetry/record-span';
|
|
6
|
+
import { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';
|
|
7
|
+
import { TelemetrySettings } from '../telemetry/telemetry-settings';
|
|
8
|
+
import { now } from '../util/now';
|
|
9
|
+
import {
|
|
10
|
+
GenerateTextOnToolCallFinishCallback,
|
|
11
|
+
GenerateTextOnToolCallStartCallback,
|
|
12
|
+
} from './generate-text';
|
|
13
|
+
import { TypedToolCall } from './tool-call';
|
|
14
|
+
import { ToolOutput } from './tool-output';
|
|
15
|
+
import { ToolSet } from './tool-set';
|
|
16
|
+
import { TypedToolResult } from './tool-result';
|
|
17
|
+
import { TypedToolError } from './tool-error';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Executes a single tool call and manages its lifecycle callbacks.
|
|
21
|
+
*
|
|
22
|
+
* This function handles the complete tool execution flow:
|
|
23
|
+
* 1. Invokes `onToolCallStart` callback before execution
|
|
24
|
+
* 2. Executes the tool's `execute` function with proper context
|
|
25
|
+
* 3. Handles streaming outputs via `onPreliminaryToolResult`
|
|
26
|
+
* 4. Invokes `onToolCallFinish` callback with success or error result
|
|
27
|
+
*
|
|
28
|
+
* @returns The tool output (result or error), or undefined if the tool has no execute function.
|
|
29
|
+
*/
|
|
30
|
+
export async function executeToolCall<TOOLS extends ToolSet>({
|
|
31
|
+
toolCall,
|
|
32
|
+
tools,
|
|
33
|
+
tracer,
|
|
34
|
+
telemetry,
|
|
35
|
+
messages,
|
|
36
|
+
abortSignal,
|
|
37
|
+
experimental_context,
|
|
38
|
+
stepNumber,
|
|
39
|
+
model,
|
|
40
|
+
onPreliminaryToolResult,
|
|
41
|
+
onToolCallStart,
|
|
42
|
+
onToolCallFinish,
|
|
43
|
+
}: {
|
|
44
|
+
toolCall: TypedToolCall<TOOLS>;
|
|
45
|
+
tools: TOOLS | undefined;
|
|
46
|
+
tracer: Tracer;
|
|
47
|
+
telemetry: TelemetrySettings | undefined;
|
|
48
|
+
messages: ModelMessage[];
|
|
49
|
+
abortSignal: AbortSignal | undefined;
|
|
50
|
+
experimental_context: unknown;
|
|
51
|
+
stepNumber?: number;
|
|
52
|
+
model?: { provider: string; modelId: string };
|
|
53
|
+
onPreliminaryToolResult?: (result: TypedToolResult<TOOLS>) => void;
|
|
54
|
+
onToolCallStart?:
|
|
55
|
+
| GenerateTextOnToolCallStartCallback<TOOLS>
|
|
56
|
+
| Array<GenerateTextOnToolCallStartCallback<TOOLS> | undefined | null>;
|
|
57
|
+
onToolCallFinish?:
|
|
58
|
+
| GenerateTextOnToolCallFinishCallback<TOOLS>
|
|
59
|
+
| Array<GenerateTextOnToolCallFinishCallback<TOOLS> | undefined | null>;
|
|
60
|
+
}): Promise<ToolOutput<TOOLS> | undefined> {
|
|
61
|
+
const { toolName, toolCallId, input } = toolCall;
|
|
62
|
+
const tool = tools?.[toolName];
|
|
63
|
+
|
|
64
|
+
if (tool?.execute == null) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const baseCallbackEvent = {
|
|
69
|
+
stepNumber,
|
|
70
|
+
model,
|
|
71
|
+
toolCall,
|
|
72
|
+
messages,
|
|
73
|
+
abortSignal,
|
|
74
|
+
functionId: telemetry?.functionId,
|
|
75
|
+
metadata: telemetry?.metadata as Record<string, unknown> | undefined,
|
|
76
|
+
experimental_context,
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
return recordSpan({
|
|
80
|
+
name: 'ai.toolCall',
|
|
81
|
+
attributes: selectTelemetryAttributes({
|
|
82
|
+
telemetry,
|
|
83
|
+
attributes: {
|
|
84
|
+
...assembleOperationName({
|
|
85
|
+
operationId: 'ai.toolCall',
|
|
86
|
+
telemetry,
|
|
87
|
+
}),
|
|
88
|
+
'ai.toolCall.name': toolName,
|
|
89
|
+
'ai.toolCall.id': toolCallId,
|
|
90
|
+
'ai.toolCall.args': {
|
|
91
|
+
output: () => JSON.stringify(input),
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
}),
|
|
95
|
+
tracer,
|
|
96
|
+
fn: async span => {
|
|
97
|
+
let output: unknown;
|
|
98
|
+
|
|
99
|
+
await notify({ event: baseCallbackEvent, callbacks: onToolCallStart });
|
|
100
|
+
|
|
101
|
+
const startTime = now();
|
|
102
|
+
|
|
103
|
+
try {
|
|
104
|
+
const stream = executeTool({
|
|
105
|
+
execute: tool.execute!.bind(tool),
|
|
106
|
+
input,
|
|
107
|
+
options: {
|
|
108
|
+
toolCallId,
|
|
109
|
+
messages,
|
|
110
|
+
abortSignal,
|
|
111
|
+
experimental_context,
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
for await (const part of stream) {
|
|
116
|
+
if (part.type === 'preliminary') {
|
|
117
|
+
onPreliminaryToolResult?.({
|
|
118
|
+
...toolCall,
|
|
119
|
+
type: 'tool-result',
|
|
120
|
+
output: part.output,
|
|
121
|
+
preliminary: true,
|
|
122
|
+
});
|
|
123
|
+
} else {
|
|
124
|
+
output = part.output;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
} catch (error) {
|
|
128
|
+
const durationMs = now() - startTime;
|
|
129
|
+
|
|
130
|
+
await notify({
|
|
131
|
+
event: {
|
|
132
|
+
...baseCallbackEvent,
|
|
133
|
+
success: false as const,
|
|
134
|
+
error,
|
|
135
|
+
durationMs,
|
|
136
|
+
},
|
|
137
|
+
callbacks: onToolCallFinish,
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
recordErrorOnSpan(span, error);
|
|
141
|
+
return {
|
|
142
|
+
type: 'tool-error',
|
|
143
|
+
toolCallId,
|
|
144
|
+
toolName,
|
|
145
|
+
input,
|
|
146
|
+
error,
|
|
147
|
+
dynamic: tool.type === 'dynamic',
|
|
148
|
+
...(toolCall.providerMetadata != null
|
|
149
|
+
? { providerMetadata: toolCall.providerMetadata }
|
|
150
|
+
: {}),
|
|
151
|
+
} as TypedToolError<TOOLS>;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const durationMs = now() - startTime;
|
|
155
|
+
|
|
156
|
+
await notify({
|
|
157
|
+
event: {
|
|
158
|
+
...baseCallbackEvent,
|
|
159
|
+
success: true as const,
|
|
160
|
+
output,
|
|
161
|
+
durationMs,
|
|
162
|
+
},
|
|
163
|
+
callbacks: onToolCallFinish,
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
try {
|
|
167
|
+
span.setAttributes(
|
|
168
|
+
await selectTelemetryAttributes({
|
|
169
|
+
telemetry,
|
|
170
|
+
attributes: {
|
|
171
|
+
'ai.toolCall.result': {
|
|
172
|
+
output: () => JSON.stringify(output),
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
}),
|
|
176
|
+
);
|
|
177
|
+
} catch (ignored) {
|
|
178
|
+
// JSON stringify might fail if the result is not serializable,
|
|
179
|
+
// in which case we just ignore it. In the future we might want to
|
|
180
|
+
// add an optional serialize method to the tool interface and warn
|
|
181
|
+
// if the result is not serializable.
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return {
|
|
185
|
+
type: 'tool-result',
|
|
186
|
+
toolCallId,
|
|
187
|
+
toolName,
|
|
188
|
+
input,
|
|
189
|
+
output,
|
|
190
|
+
dynamic: tool.type === 'dynamic',
|
|
191
|
+
...(toolCall.providerMetadata != null
|
|
192
|
+
? { providerMetadata: toolCall.providerMetadata }
|
|
193
|
+
: {}),
|
|
194
|
+
} as TypedToolResult<TOOLS>;
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
LanguageModelV3Content,
|
|
3
|
+
LanguageModelV3Reasoning,
|
|
4
|
+
} from '@ai-sdk/provider';
|
|
5
|
+
|
|
6
|
+
export function extractReasoningContent(
|
|
7
|
+
content: LanguageModelV3Content[],
|
|
8
|
+
): string | undefined {
|
|
9
|
+
const parts = content.filter(
|
|
10
|
+
(content): content is LanguageModelV3Reasoning =>
|
|
11
|
+
content.type === 'reasoning',
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
return parts.length === 0
|
|
15
|
+
? undefined
|
|
16
|
+
: parts.map(content => content.text).join('\n');
|
|
17
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { LanguageModelV3Content, LanguageModelV3Text } from '@ai-sdk/provider';
|
|
2
|
+
|
|
3
|
+
export function extractTextContent(
|
|
4
|
+
content: LanguageModelV3Content[],
|
|
5
|
+
): string | undefined {
|
|
6
|
+
const parts = content.filter(
|
|
7
|
+
(content): content is LanguageModelV3Text => content.type === 'text',
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
if (parts.length === 0) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return parts.map(content => content.text).join('');
|
|
15
|
+
}
|