ai 6.0.33 → 6.0.34
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 +10 -0
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/internal/index.js +1 -1
- package/dist/internal/index.mjs +1 -1
- package/docs/02-foundations/03-prompts.mdx +2 -2
- package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1 -1
- package/docs/07-reference/01-ai-sdk-core/28-output.mdx +1 -1
- package/package.json +6 -4
- package/src/agent/agent.ts +116 -0
- package/src/agent/create-agent-ui-stream-response.test.ts +258 -0
- package/src/agent/create-agent-ui-stream-response.ts +50 -0
- package/src/agent/create-agent-ui-stream.ts +73 -0
- package/src/agent/index.ts +33 -0
- package/src/agent/infer-agent-tools.ts +7 -0
- package/src/agent/infer-agent-ui-message.test-d.ts +54 -0
- package/src/agent/infer-agent-ui-message.ts +11 -0
- package/src/agent/pipe-agent-ui-stream-to-response.ts +52 -0
- package/src/agent/tool-loop-agent-on-finish-callback.ts +31 -0
- package/src/agent/tool-loop-agent-on-step-finish-callback.ts +11 -0
- package/src/agent/tool-loop-agent-settings.ts +182 -0
- package/src/agent/tool-loop-agent.test-d.ts +114 -0
- package/src/agent/tool-loop-agent.test.ts +442 -0
- package/src/agent/tool-loop-agent.ts +114 -0
- package/src/embed/__snapshots__/embed-many.test.ts.snap +191 -0
- package/src/embed/__snapshots__/embed.test.ts.snap +81 -0
- package/src/embed/embed-many-result.ts +53 -0
- package/src/embed/embed-many.test.ts +653 -0
- package/src/embed/embed-many.ts +378 -0
- package/src/embed/embed-result.ts +50 -0
- package/src/embed/embed.test.ts +298 -0
- package/src/embed/embed.ts +211 -0
- package/src/embed/index.ts +4 -0
- package/src/error/index.ts +34 -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/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 +18 -0
- package/src/error/no-such-tool-error.ts +35 -0
- package/src/error/no-transcript-generated-error.ts +20 -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/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.test.ts +1420 -0
- package/src/generate-image/generate-image.ts +360 -0
- package/src/generate-image/index.ts +18 -0
- package/src/generate-object/__snapshots__/generate-object.test.ts.snap +133 -0
- package/src/generate-object/__snapshots__/stream-object.test.ts.snap +297 -0
- package/src/generate-object/generate-object-result.ts +67 -0
- package/src/generate-object/generate-object.test-d.ts +49 -0
- package/src/generate-object/generate-object.test.ts +1191 -0
- package/src/generate-object/generate-object.ts +518 -0
- package/src/generate-object/index.ts +9 -0
- package/src/generate-object/inject-json-instruction.test.ts +181 -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.test-d.ts +74 -0
- package/src/generate-object/stream-object.test.ts +1950 -0
- package/src/generate-object/stream-object.ts +986 -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.test.ts +300 -0
- package/src/generate-speech/generate-speech.ts +190 -0
- package/src/generate-speech/generated-audio-file.ts +65 -0
- package/src/generate-speech/index.ts +3 -0
- package/src/generate-text/__snapshots__/generate-text.test.ts.snap +1872 -0
- package/src/generate-text/__snapshots__/stream-text.test.ts.snap +1255 -0
- package/src/generate-text/collect-tool-approvals.test.ts +553 -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 +129 -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.test-d.ts +68 -0
- package/src/generate-text/generate-text.test.ts +7011 -0
- package/src/generate-text/generate-text.ts +1223 -0
- package/src/generate-text/generated-file.ts +70 -0
- package/src/generate-text/index.ts +57 -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.test.ts +698 -0
- package/src/generate-text/output.ts +590 -0
- package/src/generate-text/parse-tool-call.test.ts +570 -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.test.ts +720 -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.test.ts +1143 -0
- package/src/generate-text/run-tools-transformation.ts +420 -0
- package/src/generate-text/smooth-stream.test.ts +2101 -0
- package/src/generate-text/smooth-stream.ts +162 -0
- package/src/generate-text/step-result.ts +238 -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.test-d.ts +200 -0
- package/src/generate-text/stream-text.test.ts +19979 -0
- package/src/generate-text/stream-text.ts +2505 -0
- package/src/generate-text/to-response-messages.test.ts +922 -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/global.ts +24 -0
- package/src/index.ts +50 -0
- package/src/logger/index.ts +6 -0
- package/src/logger/log-warnings.test.ts +351 -0
- package/src/logger/log-warnings.ts +119 -0
- package/src/middleware/__snapshots__/simulate-streaming-middleware.test.ts.snap +64 -0
- package/src/middleware/add-tool-input-examples-middleware.test.ts +476 -0
- package/src/middleware/add-tool-input-examples-middleware.ts +90 -0
- package/src/middleware/default-embedding-settings-middleware.test.ts +126 -0
- package/src/middleware/default-embedding-settings-middleware.ts +22 -0
- package/src/middleware/default-settings-middleware.test.ts +388 -0
- package/src/middleware/default-settings-middleware.ts +33 -0
- package/src/middleware/extract-json-middleware.test.ts +827 -0
- package/src/middleware/extract-json-middleware.ts +197 -0
- package/src/middleware/extract-reasoning-middleware.test.ts +1028 -0
- package/src/middleware/extract-reasoning-middleware.ts +238 -0
- package/src/middleware/index.ts +10 -0
- package/src/middleware/simulate-streaming-middleware.test.ts +911 -0
- package/src/middleware/simulate-streaming-middleware.ts +79 -0
- package/src/middleware/wrap-embedding-model.test.ts +358 -0
- package/src/middleware/wrap-embedding-model.ts +86 -0
- package/src/middleware/wrap-image-model.test.ts +423 -0
- package/src/middleware/wrap-image-model.ts +85 -0
- package/src/middleware/wrap-language-model.test.ts +518 -0
- package/src/middleware/wrap-language-model.ts +104 -0
- package/src/middleware/wrap-provider.test.ts +120 -0
- package/src/middleware/wrap-provider.ts +51 -0
- package/src/model/as-embedding-model-v3.test.ts +319 -0
- package/src/model/as-embedding-model-v3.ts +24 -0
- package/src/model/as-image-model-v3.test.ts +409 -0
- package/src/model/as-image-model-v3.ts +24 -0
- package/src/model/as-language-model-v3.test.ts +508 -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.test.ts +356 -0
- package/src/model/as-speech-model-v3.ts +24 -0
- package/src/model/as-transcription-model-v3.test.ts +529 -0
- package/src/model/as-transcription-model-v3.ts +24 -0
- package/src/model/resolve-model.test.ts +244 -0
- package/src/model/resolve-model.ts +126 -0
- package/src/prompt/call-settings.ts +148 -0
- package/src/prompt/content-part.ts +209 -0
- package/src/prompt/convert-to-language-model-prompt.test.ts +2018 -0
- package/src/prompt/convert-to-language-model-prompt.ts +442 -0
- package/src/prompt/create-tool-model-output.test.ts +508 -0
- package/src/prompt/create-tool-model-output.ts +34 -0
- package/src/prompt/data-content.test.ts +15 -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.test.ts +159 -0
- package/src/prompt/prepare-call-settings.ts +108 -0
- package/src/prompt/prepare-tools-and-tool-choice.test.ts +461 -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.test.ts +82 -0
- package/src/prompt/standardize-prompt.ts +99 -0
- package/src/prompt/wrap-gateway-error.ts +29 -0
- package/src/registry/custom-provider.test.ts +211 -0
- package/src/registry/custom-provider.ts +155 -0
- package/src/registry/index.ts +7 -0
- package/src/registry/no-such-provider-error.ts +41 -0
- package/src/registry/provider-registry.test.ts +691 -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.test.ts +516 -0
- package/src/rerank/rerank.ts +237 -0
- package/src/telemetry/assemble-operation-name.ts +21 -0
- package/src/telemetry/get-base-telemetry-attributes.ts +53 -0
- package/src/telemetry/get-tracer.ts +20 -0
- package/src/telemetry/noop-tracer.ts +69 -0
- package/src/telemetry/record-span.ts +63 -0
- package/src/telemetry/select-telemetry-attributes.ts +78 -0
- package/src/telemetry/select-temetry-attributes.test.ts +114 -0
- package/src/telemetry/stringify-for-telemetry.test.ts +114 -0
- package/src/telemetry/stringify-for-telemetry.ts +33 -0
- package/src/telemetry/telemetry-settings.ts +44 -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/not-implemented.ts +3 -0
- package/src/text-stream/create-text-stream-response.test.ts +38 -0
- package/src/text-stream/create-text-stream-response.ts +18 -0
- package/src/text-stream/index.ts +2 -0
- package/src/text-stream/pipe-text-stream-to-response.test.ts +38 -0
- package/src/text-stream/pipe-text-stream-to-response.ts +26 -0
- package/src/transcribe/index.ts +2 -0
- package/src/transcribe/transcribe-result.ts +60 -0
- package/src/transcribe/transcribe.test.ts +313 -0
- package/src/transcribe/transcribe.ts +173 -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/warning.ts +7 -0
- package/src/ui/__snapshots__/append-response-messages.test.ts.snap +416 -0
- package/src/ui/__snapshots__/convert-to-model-messages.test.ts.snap +419 -0
- package/src/ui/__snapshots__/process-chat-text-response.test.ts.snap +142 -0
- package/src/ui/call-completion-api.ts +157 -0
- package/src/ui/chat-transport.ts +83 -0
- package/src/ui/chat.test-d.ts +233 -0
- package/src/ui/chat.test.ts +2695 -0
- package/src/ui/chat.ts +716 -0
- package/src/ui/convert-file-list-to-file-ui-parts.ts +36 -0
- package/src/ui/convert-to-model-messages.test.ts +2775 -0
- package/src/ui/convert-to-model-messages.ts +373 -0
- package/src/ui/default-chat-transport.ts +36 -0
- package/src/ui/direct-chat-transport.test.ts +446 -0
- package/src/ui/direct-chat-transport.ts +118 -0
- package/src/ui/http-chat-transport.test.ts +185 -0
- package/src/ui/http-chat-transport.ts +292 -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.test.ts +371 -0
- package/src/ui/last-assistant-message-is-complete-with-tool-calls.ts +39 -0
- package/src/ui/process-text-stream.test.ts +38 -0
- package/src/ui/process-text-stream.ts +16 -0
- package/src/ui/process-ui-message-stream.test.ts +8052 -0
- package/src/ui/process-ui-message-stream.ts +713 -0
- package/src/ui/text-stream-chat-transport.ts +23 -0
- package/src/ui/transform-text-to-ui-message-stream.test.ts +124 -0
- package/src/ui/transform-text-to-ui-message-stream.ts +27 -0
- package/src/ui/ui-messages.test.ts +48 -0
- package/src/ui/ui-messages.ts +534 -0
- package/src/ui/use-completion.ts +84 -0
- package/src/ui/validate-ui-messages.test.ts +1428 -0
- package/src/ui/validate-ui-messages.ts +476 -0
- package/src/ui-message-stream/create-ui-message-stream-response.test.ts +266 -0
- package/src/ui-message-stream/create-ui-message-stream-response.ts +32 -0
- package/src/ui-message-stream/create-ui-message-stream.test.ts +639 -0
- package/src/ui-message-stream/create-ui-message-stream.ts +124 -0
- package/src/ui-message-stream/get-response-ui-message-id.test.ts +55 -0
- package/src/ui-message-stream/get-response-ui-message-id.ts +24 -0
- package/src/ui-message-stream/handle-ui-message-stream-finish.test.ts +429 -0
- package/src/ui-message-stream/handle-ui-message-stream-finish.ts +135 -0
- package/src/ui-message-stream/index.ts +13 -0
- package/src/ui-message-stream/json-to-sse-transform-stream.ts +12 -0
- package/src/ui-message-stream/pipe-ui-message-stream-to-response.test.ts +90 -0
- package/src/ui-message-stream/pipe-ui-message-stream-to-response.ts +40 -0
- package/src/ui-message-stream/read-ui-message-stream.test.ts +122 -0
- package/src/ui-message-stream/read-ui-message-stream.ts +87 -0
- package/src/ui-message-stream/ui-message-chunks.test-d.ts +18 -0
- package/src/ui-message-stream/ui-message-chunks.ts +344 -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-response-init.ts +5 -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.test.ts +241 -0
- package/src/util/async-iterable-stream.ts +94 -0
- package/src/util/consume-stream.ts +29 -0
- package/src/util/cosine-similarity.test.ts +57 -0
- package/src/util/cosine-similarity.ts +47 -0
- package/src/util/create-resolvable-promise.ts +30 -0
- package/src/util/create-stitchable-stream.test.ts +239 -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.test.ts +670 -0
- package/src/util/detect-media-type.ts +184 -0
- package/src/util/download/download-function.ts +45 -0
- package/src/util/download/download.test.ts +69 -0
- package/src/util/download/download.ts +46 -0
- package/src/util/error-handler.ts +1 -0
- package/src/util/fix-json.test.ts +279 -0
- package/src/util/fix-json.ts +401 -0
- package/src/util/get-potential-start-index.test.ts +34 -0
- package/src/util/get-potential-start-index.ts +30 -0
- package/src/util/index.ts +11 -0
- package/src/util/is-deep-equal-data.test.ts +119 -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.test.ts +155 -0
- package/src/util/merge-abort-signals.ts +43 -0
- package/src/util/merge-objects.test.ts +118 -0
- package/src/util/merge-objects.ts +79 -0
- package/src/util/now.ts +4 -0
- package/src/util/parse-partial-json.test.ts +80 -0
- package/src/util/parse-partial-json.ts +30 -0
- package/src/util/prepare-headers.test.ts +51 -0
- package/src/util/prepare-headers.ts +14 -0
- package/src/util/prepare-retries.test.ts +10 -0
- package/src/util/prepare-retries.ts +47 -0
- package/src/util/retry-error.ts +41 -0
- package/src/util/retry-with-exponential-backoff.test.ts +446 -0
- package/src/util/retry-with-exponential-backoff.ts +154 -0
- package/src/util/serial-job-executor.test.ts +162 -0
- package/src/util/serial-job-executor.ts +36 -0
- package/src/util/simulate-readable-stream.test.ts +98 -0
- package/src/util/simulate-readable-stream.ts +39 -0
- package/src/util/split-array.test.ts +60 -0
- package/src/util/split-array.ts +20 -0
- package/src/util/value-of.ts +65 -0
- package/src/util/write-to-server-response.test.ts +266 -0
- package/src/util/write-to-server-response.ts +49 -0
- package/src/version.ts +5 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { UIMessageChunk } from '../ui-message-stream';
|
|
2
|
+
import { ChatRequestOptions } from './chat';
|
|
3
|
+
import { UIMessage } from './ui-messages';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Transport interface for handling chat message communication and streaming.
|
|
7
|
+
*
|
|
8
|
+
* The `ChatTransport` interface provides fine-grained control over how messages
|
|
9
|
+
* are sent to API endpoints and how responses are processed. This enables
|
|
10
|
+
* alternative communication protocols like WebSockets, custom authentication
|
|
11
|
+
* patterns, or specialized backend integrations.
|
|
12
|
+
*
|
|
13
|
+
* @template UI_MESSAGE - The UI message type extending UIMessage
|
|
14
|
+
*/
|
|
15
|
+
export interface ChatTransport<UI_MESSAGE extends UIMessage> {
|
|
16
|
+
/**
|
|
17
|
+
* Sends messages to the chat API endpoint and returns a streaming response.
|
|
18
|
+
*
|
|
19
|
+
* This method handles both new message submission and message regeneration.
|
|
20
|
+
* It supports real-time streaming of responses through UIMessageChunk events.
|
|
21
|
+
*
|
|
22
|
+
* @param options - Configuration object containing:
|
|
23
|
+
* @param options.trigger - The type of message submission:
|
|
24
|
+
* - `'submit-message'`: Submitting a new user message
|
|
25
|
+
* - `'regenerate-message'`: Regenerating an assistant response
|
|
26
|
+
* @param options.chatId - Unique identifier for the chat session
|
|
27
|
+
* @param options.messageId - ID of the message to regenerate (for regenerate-message trigger) or undefined for new messages
|
|
28
|
+
* @param options.messages - Array of UI messages representing the conversation history
|
|
29
|
+
* @param options.abortSignal - Signal to abort the request if needed
|
|
30
|
+
* @param options.headers - Additional HTTP headers to include in the request
|
|
31
|
+
* @param options.body - Additional JSON properties to include in the request body
|
|
32
|
+
* @param options.metadata - Custom metadata to attach to the request
|
|
33
|
+
*
|
|
34
|
+
* @returns Promise resolving to a ReadableStream of UIMessageChunk objects.
|
|
35
|
+
* The stream emits various chunk types like:
|
|
36
|
+
* - `text-start`, `text-delta`, `text-end`: For streaming text content
|
|
37
|
+
* - `tool-input-start`, `tool-input-delta`, `tool-input-available`: For tool calls
|
|
38
|
+
* - `data-part-start`, `data-part-delta`, `data-part-available`: For data parts
|
|
39
|
+
* - `error`: For error handling
|
|
40
|
+
*
|
|
41
|
+
* @throws Error when the API request fails or response is invalid
|
|
42
|
+
*/
|
|
43
|
+
sendMessages: (
|
|
44
|
+
options: {
|
|
45
|
+
/** The type of message submission - either new message or regeneration */
|
|
46
|
+
trigger: 'submit-message' | 'regenerate-message';
|
|
47
|
+
/** Unique identifier for the chat session */
|
|
48
|
+
chatId: string;
|
|
49
|
+
/** ID of the message to regenerate, or undefined for new messages */
|
|
50
|
+
messageId: string | undefined;
|
|
51
|
+
/** Array of UI messages representing the conversation history */
|
|
52
|
+
messages: UI_MESSAGE[];
|
|
53
|
+
/** Signal to abort the request if needed */
|
|
54
|
+
abortSignal: AbortSignal | undefined;
|
|
55
|
+
} & ChatRequestOptions,
|
|
56
|
+
) => Promise<ReadableStream<UIMessageChunk>>;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Reconnects to an existing streaming response for the specified chat session.
|
|
60
|
+
*
|
|
61
|
+
* This method is used to resume streaming when a connection is interrupted
|
|
62
|
+
* or when resuming a chat session. It's particularly useful for maintaining
|
|
63
|
+
* continuity in long-running conversations or recovering from network issues.
|
|
64
|
+
*
|
|
65
|
+
* @param options - Configuration object containing:
|
|
66
|
+
* @param options.chatId - Unique identifier for the chat session to reconnect to
|
|
67
|
+
* @param options.headers - Additional HTTP headers to include in the reconnection request
|
|
68
|
+
* @param options.body - Additional JSON properties to include in the request body
|
|
69
|
+
* @param options.metadata - Custom metadata to attach to the request
|
|
70
|
+
*
|
|
71
|
+
* @returns Promise resolving to:
|
|
72
|
+
* - `ReadableStream<UIMessageChunk>`: If an active stream is found and can be resumed
|
|
73
|
+
* - `null`: If no active stream exists for the specified chat session (e.g., response already completed)
|
|
74
|
+
*
|
|
75
|
+
* @throws Error when the reconnection request fails or response is invalid
|
|
76
|
+
*/
|
|
77
|
+
reconnectToStream: (
|
|
78
|
+
options: {
|
|
79
|
+
/** Unique identifier for the chat session to reconnect to */
|
|
80
|
+
chatId: string;
|
|
81
|
+
} & ChatRequestOptions,
|
|
82
|
+
) => Promise<ReadableStream<UIMessageChunk> | null>;
|
|
83
|
+
}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
import { tool } from '@ai-sdk/provider-utils';
|
|
3
|
+
import { ChatInit } from './chat';
|
|
4
|
+
import { ToolSet } from '../generate-text/tool-set';
|
|
5
|
+
import { InferUITools, UIDataTypes, UIMessage, UITools } from './ui-messages';
|
|
6
|
+
import { describe, it, expectTypeOf } from 'vitest';
|
|
7
|
+
|
|
8
|
+
type ToolCallCallback<TOOLS extends ToolSet | UITools> = NonNullable<
|
|
9
|
+
ChatInit<
|
|
10
|
+
UIMessage<
|
|
11
|
+
never,
|
|
12
|
+
UIDataTypes,
|
|
13
|
+
TOOLS extends ToolSet ? InferUITools<TOOLS> : TOOLS
|
|
14
|
+
>
|
|
15
|
+
>['onToolCall']
|
|
16
|
+
>;
|
|
17
|
+
|
|
18
|
+
type ToolCallArgument<TOOLS extends ToolSet | UITools> = Parameters<
|
|
19
|
+
ToolCallCallback<TOOLS>
|
|
20
|
+
>[0]['toolCall'];
|
|
21
|
+
|
|
22
|
+
describe('onToolCall', () => {
|
|
23
|
+
describe('no helpers', () => {
|
|
24
|
+
it('single tool with output schema', () => {
|
|
25
|
+
type Tools = {
|
|
26
|
+
simple: {
|
|
27
|
+
input: number;
|
|
28
|
+
output: string;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
expectTypeOf<
|
|
33
|
+
ToolCallArgument<Tools> & { dynamic?: false }
|
|
34
|
+
>().toMatchTypeOf<{
|
|
35
|
+
toolName: 'simple';
|
|
36
|
+
input: number;
|
|
37
|
+
}>();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('single tool without output schema', () => {
|
|
41
|
+
type Tools = {
|
|
42
|
+
simple: {
|
|
43
|
+
input: number;
|
|
44
|
+
output: undefined;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
expectTypeOf<
|
|
49
|
+
ToolCallArgument<Tools> & { dynamic?: false }
|
|
50
|
+
>().toMatchTypeOf<{
|
|
51
|
+
toolName: 'simple';
|
|
52
|
+
input: number;
|
|
53
|
+
}>();
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('multiple tools with output schema', () => {
|
|
57
|
+
type Tools = {
|
|
58
|
+
simple: {
|
|
59
|
+
input: number;
|
|
60
|
+
output: string;
|
|
61
|
+
};
|
|
62
|
+
complex: {
|
|
63
|
+
input: {
|
|
64
|
+
title: string;
|
|
65
|
+
description: string;
|
|
66
|
+
};
|
|
67
|
+
output: Array<{
|
|
68
|
+
message: string;
|
|
69
|
+
}>;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
expectTypeOf<
|
|
74
|
+
ToolCallArgument<Tools> & { dynamic?: false }
|
|
75
|
+
>().toMatchTypeOf<
|
|
76
|
+
| {
|
|
77
|
+
toolName: 'simple';
|
|
78
|
+
input: number;
|
|
79
|
+
}
|
|
80
|
+
| {
|
|
81
|
+
toolName: 'complex';
|
|
82
|
+
input: {
|
|
83
|
+
title: string;
|
|
84
|
+
description: string;
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
>();
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('multiple tools without output schema', () => {
|
|
91
|
+
type Tools = {
|
|
92
|
+
simple: {
|
|
93
|
+
input: number;
|
|
94
|
+
output: undefined;
|
|
95
|
+
};
|
|
96
|
+
complex: {
|
|
97
|
+
input: {
|
|
98
|
+
title: string;
|
|
99
|
+
description: string;
|
|
100
|
+
};
|
|
101
|
+
output: undefined;
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
expectTypeOf<
|
|
106
|
+
ToolCallArgument<Tools> & { dynamic?: false }
|
|
107
|
+
>().toMatchTypeOf<
|
|
108
|
+
| {
|
|
109
|
+
toolName: 'simple';
|
|
110
|
+
input: number;
|
|
111
|
+
}
|
|
112
|
+
| {
|
|
113
|
+
toolName: 'complex';
|
|
114
|
+
input: {
|
|
115
|
+
title: string;
|
|
116
|
+
description: string;
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
>();
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
describe('with helpers', () => {
|
|
124
|
+
it('single tool with output schema', () => {
|
|
125
|
+
const simple = tool({
|
|
126
|
+
inputSchema: z.number(),
|
|
127
|
+
outputSchema: z.string(),
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
const tools = {
|
|
131
|
+
simple,
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
expectTypeOf<
|
|
135
|
+
ToolCallArgument<typeof tools> & { dynamic?: false }
|
|
136
|
+
>().toMatchTypeOf<{
|
|
137
|
+
toolName: 'simple';
|
|
138
|
+
input: number;
|
|
139
|
+
}>();
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('single tool without output schema', () => {
|
|
143
|
+
const simple = tool({
|
|
144
|
+
inputSchema: z.number(),
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
const tools = {
|
|
148
|
+
simple,
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
expectTypeOf<
|
|
152
|
+
ToolCallArgument<typeof tools> & { dynamic?: false }
|
|
153
|
+
>().toMatchTypeOf<{
|
|
154
|
+
toolName: 'simple';
|
|
155
|
+
input: number;
|
|
156
|
+
}>();
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
it('multiple tools with output schema', () => {
|
|
160
|
+
const simple = tool({
|
|
161
|
+
inputSchema: z.number(),
|
|
162
|
+
outputSchema: z.string(),
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
const complex = tool({
|
|
166
|
+
inputSchema: z.object({
|
|
167
|
+
title: z.string(),
|
|
168
|
+
description: z.string(),
|
|
169
|
+
}),
|
|
170
|
+
outputSchema: z.array(
|
|
171
|
+
z.object({
|
|
172
|
+
message: z.string(),
|
|
173
|
+
}),
|
|
174
|
+
),
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
const tools = {
|
|
178
|
+
simple,
|
|
179
|
+
complex,
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
expectTypeOf<
|
|
183
|
+
ToolCallArgument<typeof tools> & { dynamic?: false }
|
|
184
|
+
>().toMatchTypeOf<
|
|
185
|
+
| {
|
|
186
|
+
toolName: 'simple';
|
|
187
|
+
input: number;
|
|
188
|
+
}
|
|
189
|
+
| {
|
|
190
|
+
toolName: 'complex';
|
|
191
|
+
input: {
|
|
192
|
+
title: string;
|
|
193
|
+
description: string;
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
>();
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it('multiple tools without output schema', () => {
|
|
200
|
+
const simple = tool({
|
|
201
|
+
inputSchema: z.number(),
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
const complex = tool({
|
|
205
|
+
inputSchema: z.object({
|
|
206
|
+
title: z.string(),
|
|
207
|
+
description: z.string(),
|
|
208
|
+
}),
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
const tools = {
|
|
212
|
+
simple,
|
|
213
|
+
complex,
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
expectTypeOf<
|
|
217
|
+
ToolCallArgument<typeof tools> & { dynamic?: false }
|
|
218
|
+
>().toMatchTypeOf<
|
|
219
|
+
| {
|
|
220
|
+
toolName: 'simple';
|
|
221
|
+
input: number;
|
|
222
|
+
}
|
|
223
|
+
| {
|
|
224
|
+
toolName: 'complex';
|
|
225
|
+
input: {
|
|
226
|
+
title: string;
|
|
227
|
+
description: string;
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
>();
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
});
|