ai 6.0.32 → 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 +16 -0
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +12 -2
- package/dist/index.mjs.map +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,328 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EmbeddingModelV3,
|
|
3
|
+
ImageModelV3,
|
|
4
|
+
LanguageModelV3,
|
|
5
|
+
NoSuchModelError,
|
|
6
|
+
ProviderV3,
|
|
7
|
+
RerankingModelV3,
|
|
8
|
+
SpeechModelV3,
|
|
9
|
+
TranscriptionModelV3,
|
|
10
|
+
} from '@ai-sdk/provider';
|
|
11
|
+
import { wrapImageModel } from '../middleware/wrap-image-model';
|
|
12
|
+
import { wrapLanguageModel } from '../middleware/wrap-language-model';
|
|
13
|
+
import { ImageModelMiddleware, LanguageModelMiddleware } from '../types';
|
|
14
|
+
import { NoSuchProviderError } from './no-such-provider-error';
|
|
15
|
+
|
|
16
|
+
type ExtractLiteralUnion<T> = T extends string
|
|
17
|
+
? string extends T
|
|
18
|
+
? never
|
|
19
|
+
: T
|
|
20
|
+
: never;
|
|
21
|
+
|
|
22
|
+
export interface ProviderRegistryProvider<
|
|
23
|
+
PROVIDERS extends Record<string, ProviderV3> = Record<string, ProviderV3>,
|
|
24
|
+
SEPARATOR extends string = ':',
|
|
25
|
+
> {
|
|
26
|
+
languageModel<KEY extends keyof PROVIDERS>(
|
|
27
|
+
id: KEY extends string
|
|
28
|
+
? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['languageModel']>>[0]>}`
|
|
29
|
+
: never,
|
|
30
|
+
): LanguageModelV3;
|
|
31
|
+
languageModel<KEY extends keyof PROVIDERS>(
|
|
32
|
+
id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,
|
|
33
|
+
): LanguageModelV3;
|
|
34
|
+
|
|
35
|
+
embeddingModel<KEY extends keyof PROVIDERS>(
|
|
36
|
+
id: KEY extends string
|
|
37
|
+
? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['embeddingModel']>>[0]>}`
|
|
38
|
+
: never,
|
|
39
|
+
): EmbeddingModelV3;
|
|
40
|
+
embeddingModel<KEY extends keyof PROVIDERS>(
|
|
41
|
+
id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,
|
|
42
|
+
): EmbeddingModelV3;
|
|
43
|
+
|
|
44
|
+
imageModel<KEY extends keyof PROVIDERS>(
|
|
45
|
+
id: KEY extends string
|
|
46
|
+
? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['imageModel']>>[0]>}`
|
|
47
|
+
: never,
|
|
48
|
+
): ImageModelV3;
|
|
49
|
+
imageModel<KEY extends keyof PROVIDERS>(
|
|
50
|
+
id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,
|
|
51
|
+
): ImageModelV3;
|
|
52
|
+
|
|
53
|
+
transcriptionModel<KEY extends keyof PROVIDERS>(
|
|
54
|
+
id: KEY extends string
|
|
55
|
+
? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['transcriptionModel']>>[0]>}`
|
|
56
|
+
: never,
|
|
57
|
+
): TranscriptionModelV3;
|
|
58
|
+
transcriptionModel<KEY extends keyof PROVIDERS>(
|
|
59
|
+
id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,
|
|
60
|
+
): TranscriptionModelV3;
|
|
61
|
+
|
|
62
|
+
speechModel<KEY extends keyof PROVIDERS>(
|
|
63
|
+
id: KEY extends string
|
|
64
|
+
? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['speechModel']>>[0]>}`
|
|
65
|
+
: never,
|
|
66
|
+
): SpeechModelV3;
|
|
67
|
+
speechModel<KEY extends keyof PROVIDERS>(
|
|
68
|
+
id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,
|
|
69
|
+
): SpeechModelV3;
|
|
70
|
+
|
|
71
|
+
rerankingModel<KEY extends keyof PROVIDERS>(
|
|
72
|
+
id: KEY extends string
|
|
73
|
+
? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['rerankingModel']>>[0]>}`
|
|
74
|
+
: never,
|
|
75
|
+
): RerankingModelV3;
|
|
76
|
+
rerankingModel<KEY extends keyof PROVIDERS>(
|
|
77
|
+
id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,
|
|
78
|
+
): RerankingModelV3;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Creates a registry for the given providers with optional middleware functionality.
|
|
83
|
+
* This function allows you to register multiple providers and optionally apply middleware
|
|
84
|
+
* to all language models from the registry, enabling you to transform parameters, wrap generate
|
|
85
|
+
* operations, and wrap stream operations for every language model accessed through the registry.
|
|
86
|
+
*
|
|
87
|
+
* @param providers - A record of provider instances to be registered in the registry.
|
|
88
|
+
* @param options - Configuration options for the provider registry.
|
|
89
|
+
* @param options.separator - The separator used between provider ID and model ID in the combined identifier. Defaults to ':'.
|
|
90
|
+
* @param options.languageModelMiddleware - Optional middleware to be applied to all language models from the registry. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.
|
|
91
|
+
* @param options.imageModelMiddleware - Optional middleware to be applied to all image models from the registry. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.
|
|
92
|
+
* @returns A new ProviderRegistryProvider instance that provides access to all registered providers with optional middleware applied to language and image models.
|
|
93
|
+
*/
|
|
94
|
+
export function createProviderRegistry<
|
|
95
|
+
PROVIDERS extends Record<string, ProviderV3>,
|
|
96
|
+
SEPARATOR extends string = ':',
|
|
97
|
+
>(
|
|
98
|
+
providers: PROVIDERS,
|
|
99
|
+
{
|
|
100
|
+
separator = ':' as SEPARATOR,
|
|
101
|
+
languageModelMiddleware,
|
|
102
|
+
imageModelMiddleware,
|
|
103
|
+
}: {
|
|
104
|
+
separator?: SEPARATOR;
|
|
105
|
+
languageModelMiddleware?:
|
|
106
|
+
| LanguageModelMiddleware
|
|
107
|
+
| LanguageModelMiddleware[];
|
|
108
|
+
imageModelMiddleware?: ImageModelMiddleware | ImageModelMiddleware[];
|
|
109
|
+
} = {},
|
|
110
|
+
): ProviderRegistryProvider<PROVIDERS, SEPARATOR> {
|
|
111
|
+
const registry = new DefaultProviderRegistry<PROVIDERS, SEPARATOR>({
|
|
112
|
+
separator,
|
|
113
|
+
languageModelMiddleware,
|
|
114
|
+
imageModelMiddleware,
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
for (const [id, provider] of Object.entries(providers)) {
|
|
118
|
+
registry.registerProvider({ id, provider } as {
|
|
119
|
+
id: keyof PROVIDERS;
|
|
120
|
+
provider: PROVIDERS[keyof PROVIDERS];
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return registry;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* @deprecated Use `createProviderRegistry` instead.
|
|
129
|
+
*/
|
|
130
|
+
export const experimental_createProviderRegistry = createProviderRegistry;
|
|
131
|
+
|
|
132
|
+
class DefaultProviderRegistry<
|
|
133
|
+
PROVIDERS extends Record<string, ProviderV3>,
|
|
134
|
+
SEPARATOR extends string,
|
|
135
|
+
> implements ProviderRegistryProvider<PROVIDERS, SEPARATOR>
|
|
136
|
+
{
|
|
137
|
+
private providers: PROVIDERS = {} as PROVIDERS;
|
|
138
|
+
private separator: SEPARATOR;
|
|
139
|
+
private languageModelMiddleware?:
|
|
140
|
+
| LanguageModelMiddleware
|
|
141
|
+
| LanguageModelMiddleware[];
|
|
142
|
+
private imageModelMiddleware?: ImageModelMiddleware | ImageModelMiddleware[];
|
|
143
|
+
|
|
144
|
+
constructor({
|
|
145
|
+
separator,
|
|
146
|
+
languageModelMiddleware,
|
|
147
|
+
imageModelMiddleware,
|
|
148
|
+
}: {
|
|
149
|
+
separator: SEPARATOR;
|
|
150
|
+
languageModelMiddleware?:
|
|
151
|
+
| LanguageModelMiddleware
|
|
152
|
+
| LanguageModelMiddleware[];
|
|
153
|
+
imageModelMiddleware?: ImageModelMiddleware | ImageModelMiddleware[];
|
|
154
|
+
}) {
|
|
155
|
+
this.separator = separator;
|
|
156
|
+
this.languageModelMiddleware = languageModelMiddleware;
|
|
157
|
+
this.imageModelMiddleware = imageModelMiddleware;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
registerProvider<K extends keyof PROVIDERS>({
|
|
161
|
+
id,
|
|
162
|
+
provider,
|
|
163
|
+
}: {
|
|
164
|
+
id: K;
|
|
165
|
+
provider: PROVIDERS[K];
|
|
166
|
+
}): void {
|
|
167
|
+
this.providers[id] = provider;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
private getProvider(
|
|
171
|
+
id: string,
|
|
172
|
+
modelType:
|
|
173
|
+
| 'languageModel'
|
|
174
|
+
| 'embeddingModel'
|
|
175
|
+
| 'imageModel'
|
|
176
|
+
| 'transcriptionModel'
|
|
177
|
+
| 'speechModel'
|
|
178
|
+
| 'rerankingModel',
|
|
179
|
+
): ProviderV3 {
|
|
180
|
+
const provider = this.providers[id as keyof PROVIDERS];
|
|
181
|
+
|
|
182
|
+
if (provider == null) {
|
|
183
|
+
throw new NoSuchProviderError({
|
|
184
|
+
modelId: id,
|
|
185
|
+
modelType,
|
|
186
|
+
providerId: id,
|
|
187
|
+
availableProviders: Object.keys(this.providers),
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return provider;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
private splitId(
|
|
195
|
+
id: string,
|
|
196
|
+
modelType:
|
|
197
|
+
| 'languageModel'
|
|
198
|
+
| 'embeddingModel'
|
|
199
|
+
| 'imageModel'
|
|
200
|
+
| 'transcriptionModel'
|
|
201
|
+
| 'speechModel'
|
|
202
|
+
| 'rerankingModel',
|
|
203
|
+
): [string, string] {
|
|
204
|
+
const index = id.indexOf(this.separator);
|
|
205
|
+
|
|
206
|
+
if (index === -1) {
|
|
207
|
+
throw new NoSuchModelError({
|
|
208
|
+
modelId: id,
|
|
209
|
+
modelType,
|
|
210
|
+
message:
|
|
211
|
+
`Invalid ${modelType} id for registry: ${id} ` +
|
|
212
|
+
`(must be in the format "providerId${this.separator}modelId")`,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return [id.slice(0, index), id.slice(index + this.separator.length)];
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
languageModel<KEY extends keyof PROVIDERS>(
|
|
220
|
+
id: `${KEY & string}${SEPARATOR}${string}`,
|
|
221
|
+
): LanguageModelV3 {
|
|
222
|
+
const [providerId, modelId] = this.splitId(id, 'languageModel');
|
|
223
|
+
let model = this.getProvider(providerId, 'languageModel').languageModel?.(
|
|
224
|
+
modelId,
|
|
225
|
+
);
|
|
226
|
+
|
|
227
|
+
if (model == null) {
|
|
228
|
+
throw new NoSuchModelError({ modelId: id, modelType: 'languageModel' });
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if (this.languageModelMiddleware != null) {
|
|
232
|
+
model = wrapLanguageModel({
|
|
233
|
+
model,
|
|
234
|
+
middleware: this.languageModelMiddleware,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
return model;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
embeddingModel<KEY extends keyof PROVIDERS>(
|
|
242
|
+
id: `${KEY & string}${SEPARATOR}${string}`,
|
|
243
|
+
): EmbeddingModelV3 {
|
|
244
|
+
const [providerId, modelId] = this.splitId(id, 'embeddingModel');
|
|
245
|
+
const provider = this.getProvider(providerId, 'embeddingModel');
|
|
246
|
+
|
|
247
|
+
const model = provider.embeddingModel?.(modelId);
|
|
248
|
+
|
|
249
|
+
if (model == null) {
|
|
250
|
+
throw new NoSuchModelError({
|
|
251
|
+
modelId: id,
|
|
252
|
+
modelType: 'embeddingModel',
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return model;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
imageModel<KEY extends keyof PROVIDERS>(
|
|
260
|
+
id: `${KEY & string}${SEPARATOR}${string}`,
|
|
261
|
+
): ImageModelV3 {
|
|
262
|
+
const [providerId, modelId] = this.splitId(id, 'imageModel');
|
|
263
|
+
const provider = this.getProvider(providerId, 'imageModel');
|
|
264
|
+
|
|
265
|
+
let model = provider.imageModel?.(modelId);
|
|
266
|
+
|
|
267
|
+
if (model == null) {
|
|
268
|
+
throw new NoSuchModelError({ modelId: id, modelType: 'imageModel' });
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
if (this.imageModelMiddleware != null) {
|
|
272
|
+
model = wrapImageModel({
|
|
273
|
+
model,
|
|
274
|
+
middleware: this.imageModelMiddleware,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
return model;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
transcriptionModel<KEY extends keyof PROVIDERS>(
|
|
282
|
+
id: `${KEY & string}${SEPARATOR}${string}`,
|
|
283
|
+
): TranscriptionModelV3 {
|
|
284
|
+
const [providerId, modelId] = this.splitId(id, 'transcriptionModel');
|
|
285
|
+
const provider = this.getProvider(providerId, 'transcriptionModel');
|
|
286
|
+
|
|
287
|
+
const model = provider.transcriptionModel?.(modelId);
|
|
288
|
+
|
|
289
|
+
if (model == null) {
|
|
290
|
+
throw new NoSuchModelError({
|
|
291
|
+
modelId: id,
|
|
292
|
+
modelType: 'transcriptionModel',
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
return model;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
speechModel<KEY extends keyof PROVIDERS>(
|
|
300
|
+
id: `${KEY & string}${SEPARATOR}${string}`,
|
|
301
|
+
): SpeechModelV3 {
|
|
302
|
+
const [providerId, modelId] = this.splitId(id, 'speechModel');
|
|
303
|
+
const provider = this.getProvider(providerId, 'speechModel');
|
|
304
|
+
|
|
305
|
+
const model = provider.speechModel?.(modelId);
|
|
306
|
+
|
|
307
|
+
if (model == null) {
|
|
308
|
+
throw new NoSuchModelError({ modelId: id, modelType: 'speechModel' });
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
return model;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
rerankingModel<KEY extends keyof PROVIDERS>(
|
|
315
|
+
id: `${KEY & string}${SEPARATOR}${string}`,
|
|
316
|
+
): RerankingModelV3 {
|
|
317
|
+
const [providerId, modelId] = this.splitId(id, 'rerankingModel');
|
|
318
|
+
const provider = this.getProvider(providerId, 'rerankingModel');
|
|
319
|
+
|
|
320
|
+
const model = provider.rerankingModel?.(modelId);
|
|
321
|
+
|
|
322
|
+
if (model == null) {
|
|
323
|
+
throw new NoSuchModelError({ modelId: id, modelType: 'rerankingModel' });
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
return model;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ProviderMetadata } from '../types/provider-metadata';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The result of a `rerank` call.
|
|
5
|
+
* It contains the original documents, the reranked documents, and additional information.
|
|
6
|
+
*/
|
|
7
|
+
export interface RerankResult<VALUE> {
|
|
8
|
+
/**
|
|
9
|
+
* The original documents that were reranked.
|
|
10
|
+
*/
|
|
11
|
+
readonly originalDocuments: Array<VALUE>;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Reranked documents.
|
|
15
|
+
*
|
|
16
|
+
* Sorted by relevance score in descending order.
|
|
17
|
+
*
|
|
18
|
+
* Can be less than the original documents if there was a topK limit.
|
|
19
|
+
*/
|
|
20
|
+
readonly rerankedDocuments: Array<VALUE>;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The ranking is a list of objects with the original index,
|
|
24
|
+
* relevance score, and the reranked document.
|
|
25
|
+
*
|
|
26
|
+
* Sorted by relevance score in descending order.
|
|
27
|
+
*
|
|
28
|
+
* Can be less than the original documents if there was a topK limit.
|
|
29
|
+
*/
|
|
30
|
+
readonly ranking: Array<{
|
|
31
|
+
originalIndex: number;
|
|
32
|
+
score: number;
|
|
33
|
+
document: VALUE;
|
|
34
|
+
}>;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Optional provider-specific metadata.
|
|
38
|
+
*/
|
|
39
|
+
readonly providerMetadata?: ProviderMetadata;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Optional raw response data.
|
|
43
|
+
*/
|
|
44
|
+
readonly response: {
|
|
45
|
+
/**
|
|
46
|
+
* ID for the generated response if the provider sends one.
|
|
47
|
+
*/
|
|
48
|
+
id?: string;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Timestamp of the generated response.
|
|
52
|
+
*/
|
|
53
|
+
timestamp: Date;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The ID of the model that was used to generate the response.
|
|
57
|
+
*/
|
|
58
|
+
modelId: string;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Response headers.
|
|
62
|
+
*/
|
|
63
|
+
headers?: Record<string, string>;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The response body.
|
|
67
|
+
*/
|
|
68
|
+
body?: unknown;
|
|
69
|
+
};
|
|
70
|
+
}
|