@ai-sdk/voyage 0.0.0-cca10482-20260708215408

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 ADDED
@@ -0,0 +1,290 @@
1
+ # @ai-sdk/voyage
2
+
3
+ ## 0.0.0-cca10482-20260708215408
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [90cd96d]
8
+ - Updated dependencies [0f93c57]
9
+ - @ai-sdk/provider-utils@0.0.0-cca10482-20260708215408
10
+ - @ai-sdk/provider@0.0.0-cca10482-20260708215408
11
+
12
+ ## 2.0.6
13
+
14
+ ### Patch Changes
15
+
16
+ - Updated dependencies [ac306ed]
17
+ - @ai-sdk/provider-utils@5.0.6
18
+
19
+ ## 2.0.5
20
+
21
+ ### Patch Changes
22
+
23
+ - 5c5c0f5: Add experimental streaming transcription support for transcription models, including OpenAI `gpt-realtime-whisper` and xAI WebSocket STT.
24
+ - Updated dependencies [5c5c0f5]
25
+ - @ai-sdk/provider@4.0.2
26
+ - @ai-sdk/provider-utils@5.0.5
27
+
28
+ ## 2.0.4
29
+
30
+ ### Patch Changes
31
+
32
+ - Updated dependencies [c6f5e62]
33
+ - @ai-sdk/provider-utils@5.0.4
34
+
35
+ ## 2.0.3
36
+
37
+ ### Patch Changes
38
+
39
+ - Updated dependencies [8c616f0]
40
+ - @ai-sdk/provider-utils@5.0.3
41
+
42
+ ## 2.0.2
43
+
44
+ ### Patch Changes
45
+
46
+ - Updated dependencies [0274f34]
47
+ - @ai-sdk/provider@4.0.1
48
+ - @ai-sdk/provider-utils@5.0.2
49
+
50
+ ## 2.0.1
51
+
52
+ ### Patch Changes
53
+
54
+ - Updated dependencies [6a436e3]
55
+ - @ai-sdk/provider-utils@5.0.1
56
+
57
+ ## 2.0.0
58
+
59
+ ### Major Changes
60
+
61
+ - 4963f11: add voyage ai provider with embedding and reranking support
62
+ - 04e9009: chore: make provider implementations code patterns more consistent, including renaming certain exported symbols
63
+
64
+ For all externally exported symbols that were renamed, the old names continue to work via deprecated aliases.
65
+
66
+ ### Patch Changes
67
+
68
+ - 9f0e36c: trigger release for all packages after provenance setup
69
+ - 7fc6bd6: Raise minimum supported Node.js version to 22. Supported versions: 22, 24, and 26.
70
+ - 0c4c275: trigger initial canary release
71
+ - 258c093: chore: ensure consistent import handling and avoid import duplicates or cycles
72
+ - b8396f0: trigger initial beta release
73
+ - c25eb7a: chore(voyage): trigger canary release at 2.0.0
74
+
75
+ ## 2.0.0-beta.25
76
+
77
+ ### Patch Changes
78
+
79
+ - Updated dependencies [0416e3e]
80
+ - @ai-sdk/provider@4.0.0-beta.20
81
+ - @ai-sdk/provider-utils@5.0.0-beta.50
82
+
83
+ ## 2.0.0-beta.24
84
+
85
+ ### Patch Changes
86
+
87
+ - b8396f0: trigger initial beta release
88
+ - Updated dependencies [b8396f0]
89
+ - @ai-sdk/provider-utils@5.0.0-beta.49
90
+ - @ai-sdk/provider@4.0.0-beta.19
91
+
92
+ ## 2.0.0-canary.23
93
+
94
+ ### Patch Changes
95
+
96
+ - Updated dependencies [aeda373]
97
+ - Updated dependencies [375fdd7]
98
+ - Updated dependencies [b4507d5]
99
+ - @ai-sdk/provider-utils@5.0.0-canary.48
100
+
101
+ ## 2.0.0-canary.22
102
+
103
+ ### Patch Changes
104
+
105
+ - Updated dependencies [bae5e2b]
106
+ - @ai-sdk/provider-utils@5.0.0-canary.47
107
+
108
+ ## 2.0.0-canary.21
109
+
110
+ ### Patch Changes
111
+
112
+ - Updated dependencies [ce769dd]
113
+ - @ai-sdk/provider@4.0.0-canary.18
114
+ - @ai-sdk/provider-utils@5.0.0-canary.46
115
+
116
+ ## 2.0.0-canary.20
117
+
118
+ ### Patch Changes
119
+
120
+ - Updated dependencies [ee798eb]
121
+ - Updated dependencies [daf6637]
122
+ - @ai-sdk/provider-utils@5.0.0-canary.45
123
+
124
+ ## 2.0.0-canary.19
125
+
126
+ ### Patch Changes
127
+
128
+ - Updated dependencies [6c93e36]
129
+ - Updated dependencies [f617ac2]
130
+ - @ai-sdk/provider-utils@5.0.0-canary.44
131
+
132
+ ## 2.0.0-canary.18
133
+
134
+ ### Patch Changes
135
+
136
+ - 7fc6bd6: Raise minimum supported Node.js version to 22. Supported versions: 22, 24, and 26.
137
+ - Updated dependencies [7fc6bd6]
138
+ - @ai-sdk/provider-utils@5.0.0-canary.43
139
+ - @ai-sdk/provider@4.0.0-canary.17
140
+
141
+ ## 2.0.0-canary.17
142
+
143
+ ### Patch Changes
144
+
145
+ - Updated dependencies [a6617c5]
146
+ - @ai-sdk/provider-utils@5.0.0-canary.42
147
+
148
+ ## 2.0.0-canary.16
149
+
150
+ ### Patch Changes
151
+
152
+ - Updated dependencies [28dfa06]
153
+ - Updated dependencies [e93fa91]
154
+ - @ai-sdk/provider-utils@5.0.0-canary.41
155
+
156
+ ## 2.0.0-canary.15
157
+
158
+ ### Patch Changes
159
+
160
+ - Updated dependencies [a7de9c9]
161
+ - @ai-sdk/provider-utils@5.0.0-canary.40
162
+
163
+ ## 2.0.0-canary.14
164
+
165
+ ### Patch Changes
166
+
167
+ - Updated dependencies [105f95b]
168
+ - @ai-sdk/provider-utils@5.0.0-canary.39
169
+
170
+ ## 2.0.0-canary.13
171
+
172
+ ### Patch Changes
173
+
174
+ - Updated dependencies [ca446f8]
175
+ - @ai-sdk/provider-utils@5.0.0-canary.38
176
+
177
+ ## 2.0.0-canary.12
178
+
179
+ ### Patch Changes
180
+
181
+ - Updated dependencies [d848405]
182
+ - @ai-sdk/provider-utils@5.0.0-canary.37
183
+
184
+ ## 2.0.0-canary.11
185
+
186
+ ### Patch Changes
187
+
188
+ - Updated dependencies [ca39020]
189
+ - @ai-sdk/provider-utils@5.0.0-canary.36
190
+
191
+ ## 2.0.0-canary.10
192
+
193
+ ### Patch Changes
194
+
195
+ - Updated dependencies [f634bac]
196
+ - @ai-sdk/provider-utils@5.0.0-canary.35
197
+
198
+ ## 2.0.0-canary.9
199
+
200
+ ### Patch Changes
201
+
202
+ - Updated dependencies [69254e0]
203
+ - Updated dependencies [3015fc3]
204
+ - @ai-sdk/provider-utils@5.0.0-canary.34
205
+
206
+ ## 2.0.0-canary.8
207
+
208
+ ### Patch Changes
209
+
210
+ - c25eb7a: chore(voyage): trigger canary release at 2.0.0
211
+
212
+ ## 1.0.0-canary.7
213
+
214
+ ### Patch Changes
215
+
216
+ - Updated dependencies [2427d88]
217
+ - @ai-sdk/provider-utils@5.0.0-canary.33
218
+
219
+ ## 1.0.0-canary.6
220
+
221
+ ### Patch Changes
222
+
223
+ - Updated dependencies [5463d0d]
224
+ - @ai-sdk/provider-utils@5.0.0-canary.32
225
+ - @ai-sdk/provider@4.0.0-canary.16
226
+
227
+ ## 1.0.0-canary.5
228
+
229
+ ### Patch Changes
230
+
231
+ - 0c4c275: trigger initial canary release
232
+ - Updated dependencies [0c4c275]
233
+ - @ai-sdk/provider-utils@5.0.0-canary.31
234
+ - @ai-sdk/provider@4.0.0-canary.15
235
+
236
+ ## 1.0.0-beta.4
237
+
238
+ ### Major Changes
239
+
240
+ - 04e9009: chore: make provider implementations code patterns more consistent, including renaming certain exported symbols
241
+
242
+ For all externally exported symbols that were renamed, the old names continue to work via deprecated aliases.
243
+
244
+ ### Patch Changes
245
+
246
+ - Updated dependencies [08d2129]
247
+ - @ai-sdk/provider-utils@5.0.0-beta.30
248
+
249
+ ## 1.0.0-beta.3
250
+
251
+ ### Patch Changes
252
+
253
+ - 258c093: chore: ensure consistent import handling and avoid import duplicates or cycles
254
+ - Updated dependencies [9bd6512]
255
+ - Updated dependencies [258c093]
256
+ - Updated dependencies [b6783da]
257
+ - @ai-sdk/provider-utils@5.0.0-beta.29
258
+ - @ai-sdk/provider@4.0.0-beta.14
259
+
260
+ ## 1.0.0-beta.2
261
+
262
+ ### Patch Changes
263
+
264
+ - 9f0e36c: trigger release for all packages after provenance setup
265
+ - Updated dependencies [9f0e36c]
266
+ - @ai-sdk/provider@4.0.0-beta.13
267
+ - @ai-sdk/provider-utils@5.0.0-beta.28
268
+
269
+ ## 1.0.0-beta.1
270
+
271
+ ### Patch Changes
272
+
273
+ - Updated dependencies [785fe16]
274
+ - Updated dependencies [67df0a0]
275
+ - Updated dependencies [befb78c]
276
+ - Updated dependencies [0458559]
277
+ - Updated dependencies [5852c0a]
278
+ - Updated dependencies [fc92055]
279
+ - @ai-sdk/provider-utils@5.0.0-beta.27
280
+
281
+ ## 1.0.0-beta.0
282
+
283
+ ### Major Changes
284
+
285
+ - 4963f11: add voyage ai provider with embedding and reranking support
286
+
287
+ ### Patch Changes
288
+
289
+ - Updated dependencies [2e98477]
290
+ - @ai-sdk/provider-utils@5.0.0-beta.26
package/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2023 Vercel, Inc.
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
package/README.md ADDED
@@ -0,0 +1,46 @@
1
+ # AI SDK - Voyage AI Provider
2
+
3
+ The **[Voyage AI provider](https://ai-sdk.dev/providers/ai-sdk-providers/voyage)** for the [AI SDK](https://ai-sdk.dev/docs) contains embedding and reranking model support for the [Voyage AI](https://voyageai.com/) APIs.
4
+
5
+ ## Setup
6
+
7
+ The Voyage AI provider is available in the `@ai-sdk/voyage` module. You can install it with
8
+
9
+ ```bash
10
+ npm i @ai-sdk/voyage
11
+ ```
12
+
13
+ ## Skill for Coding Agents
14
+
15
+ If you use coding agents such as Claude Code or Cursor, we highly recommend adding the AI SDK skill to your repository:
16
+
17
+ ```shell
18
+ npx skills add vercel/ai
19
+ ```
20
+
21
+ ## Provider Instance
22
+
23
+ You can import the default provider instance `voyage` from `@ai-sdk/voyage`:
24
+
25
+ ```ts
26
+ import { voyage } from '@ai-sdk/voyage';
27
+ ```
28
+
29
+ ## Example
30
+
31
+ ```ts
32
+ import { voyage } from '@ai-sdk/voyage';
33
+ import { embedMany } from 'ai';
34
+
35
+ const { embeddings } = await embedMany({
36
+ model: voyage.textEmbedding('voyage-3'),
37
+ values: [
38
+ 'Sunny days are great for hiking',
39
+ 'Machine learning is a subset of AI',
40
+ ],
41
+ });
42
+ ```
43
+
44
+ ## Documentation
45
+
46
+ Please check out the **[Voyage AI provider documentation](https://ai-sdk.dev/providers/ai-sdk-providers/voyage)** for more information.
@@ -0,0 +1,48 @@
1
+ import { ProviderV4, EmbeddingModelV4, RerankingModelV4 } from '@ai-sdk/provider';
2
+ import { FetchFunction } from '@ai-sdk/provider-utils';
3
+ import { z } from 'zod/v4';
4
+
5
+ type VoyageEmbeddingModelId = 'voyage-4-large' | 'voyage-4' | 'voyage-4-lite' | 'voyage-4-nano' | 'voyage-code-3.5' | 'voyage-code-3' | 'voyage-3-large' | 'voyage-3.5' | 'voyage-3.5-lite' | 'voyage-3' | 'voyage-3-lite' | 'voyage-finance-2' | 'voyage-law-2' | 'voyage-multilingual-2' | 'voyage-code-2' | 'voyage-2' | (string & {});
6
+ declare const voyageEmbeddingModelOptions: z.ZodObject<{
7
+ inputType: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
8
+ query: "query";
9
+ document: "document";
10
+ }>>>;
11
+ truncation: z.ZodOptional<z.ZodBoolean>;
12
+ outputDimension: z.ZodOptional<z.ZodNumber>;
13
+ outputDtype: z.ZodOptional<z.ZodEnum<{
14
+ float: "float";
15
+ int8: "int8";
16
+ uint8: "uint8";
17
+ binary: "binary";
18
+ ubinary: "ubinary";
19
+ }>>;
20
+ }, z.core.$strip>;
21
+ type VoyageEmbeddingModelOptions = z.infer<typeof voyageEmbeddingModelOptions>;
22
+
23
+ type VoyageRerankingModelId = 'rerank-2.5' | 'rerank-2.5-lite' | 'rerank-2' | 'rerank-2-lite' | 'rerank-1' | 'rerank-lite-1' | (string & {});
24
+ type VoyageRerankingModelOptions = {
25
+ returnDocuments?: boolean;
26
+ truncation?: boolean;
27
+ };
28
+
29
+ interface VoyageProvider extends ProviderV4 {
30
+ embedding(modelId: VoyageEmbeddingModelId): EmbeddingModelV4;
31
+ embeddingModel(modelId: VoyageEmbeddingModelId): EmbeddingModelV4;
32
+ textEmbedding(modelId: VoyageEmbeddingModelId): EmbeddingModelV4;
33
+ textEmbeddingModel(modelId: VoyageEmbeddingModelId): EmbeddingModelV4;
34
+ reranking(modelId: VoyageRerankingModelId): RerankingModelV4;
35
+ rerankingModel(modelId: VoyageRerankingModelId): RerankingModelV4;
36
+ }
37
+ interface VoyageProviderSettings {
38
+ baseURL?: string;
39
+ apiKey?: string;
40
+ headers?: Record<string, string>;
41
+ fetch?: FetchFunction;
42
+ }
43
+ declare function createVoyage(options?: VoyageProviderSettings): VoyageProvider;
44
+ declare const voyage: VoyageProvider;
45
+
46
+ declare const VERSION: string;
47
+
48
+ export { VERSION, type VoyageEmbeddingModelOptions, type VoyageProvider, type VoyageProviderSettings, type VoyageRerankingModelOptions, createVoyage, voyage };
package/dist/index.js ADDED
@@ -0,0 +1,289 @@
1
+ // src/voyage-provider.ts
2
+ import {
3
+ NoSuchModelError
4
+ } from "@ai-sdk/provider";
5
+ import {
6
+ loadApiKey,
7
+ withoutTrailingSlash,
8
+ withUserAgentSuffix
9
+ } from "@ai-sdk/provider-utils";
10
+
11
+ // src/voyage-embedding-model.ts
12
+ import {
13
+ TooManyEmbeddingValuesForCallError
14
+ } from "@ai-sdk/provider";
15
+ import {
16
+ combineHeaders,
17
+ createJsonResponseHandler,
18
+ parseProviderOptions,
19
+ postJsonToApi,
20
+ serializeModelOptions,
21
+ WORKFLOW_SERIALIZE,
22
+ WORKFLOW_DESERIALIZE
23
+ } from "@ai-sdk/provider-utils";
24
+ import { z as z3 } from "zod/v4";
25
+
26
+ // src/voyage-embedding-model-options.ts
27
+ import { z } from "zod/v4";
28
+ var voyageEmbeddingModelOptions = z.object({
29
+ inputType: z.enum(["query", "document"]).nullable().optional(),
30
+ truncation: z.boolean().optional(),
31
+ outputDimension: z.number().optional(),
32
+ outputDtype: z.enum(["float", "int8", "uint8", "binary", "ubinary"]).optional()
33
+ });
34
+
35
+ // src/voyage-error.ts
36
+ import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
37
+ import { z as z2 } from "zod/v4";
38
+ var voyageErrorDataSchema = z2.object({
39
+ detail: z2.string()
40
+ });
41
+ var voyageFailedResponseHandler = createJsonErrorResponseHandler({
42
+ errorSchema: voyageErrorDataSchema,
43
+ errorToMessage: (data) => data.detail
44
+ });
45
+
46
+ // src/voyage-embedding-model.ts
47
+ var VoyageEmbeddingModel = class _VoyageEmbeddingModel {
48
+ constructor(modelId, config) {
49
+ this.specificationVersion = "v4";
50
+ this.maxEmbeddingsPerCall = 128;
51
+ this.supportsParallelCalls = true;
52
+ this.modelId = modelId;
53
+ this.config = config;
54
+ }
55
+ static [WORKFLOW_SERIALIZE](model) {
56
+ return serializeModelOptions({
57
+ modelId: model.modelId,
58
+ config: model.config
59
+ });
60
+ }
61
+ static [WORKFLOW_DESERIALIZE](options) {
62
+ return new _VoyageEmbeddingModel(options.modelId, options.config);
63
+ }
64
+ get provider() {
65
+ return this.config.provider;
66
+ }
67
+ async doEmbed({
68
+ values,
69
+ headers,
70
+ abortSignal,
71
+ providerOptions
72
+ }) {
73
+ var _a, _b, _c, _d;
74
+ const embeddingOptions = await parseProviderOptions({
75
+ provider: "voyage",
76
+ providerOptions,
77
+ schema: voyageEmbeddingModelOptions
78
+ });
79
+ if (values.length > this.maxEmbeddingsPerCall) {
80
+ throw new TooManyEmbeddingValuesForCallError({
81
+ provider: this.provider,
82
+ modelId: this.modelId,
83
+ maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,
84
+ values
85
+ });
86
+ }
87
+ const {
88
+ responseHeaders,
89
+ value: response,
90
+ rawValue
91
+ } = await postJsonToApi({
92
+ url: `${this.config.baseURL}/embeddings`,
93
+ headers: combineHeaders((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), headers),
94
+ body: {
95
+ input: values,
96
+ model: this.modelId,
97
+ input_type: embeddingOptions == null ? void 0 : embeddingOptions.inputType,
98
+ truncation: embeddingOptions == null ? void 0 : embeddingOptions.truncation,
99
+ output_dimension: embeddingOptions == null ? void 0 : embeddingOptions.outputDimension,
100
+ output_dtype: embeddingOptions == null ? void 0 : embeddingOptions.outputDtype
101
+ },
102
+ failedResponseHandler: voyageFailedResponseHandler,
103
+ successfulResponseHandler: createJsonResponseHandler(
104
+ voyageEmbeddingResponseSchema
105
+ ),
106
+ abortSignal,
107
+ fetch: this.config.fetch
108
+ });
109
+ return {
110
+ warnings: [],
111
+ embeddings: response.data.sort((a, b) => a.index - b.index).map((item) => item.embedding),
112
+ usage: { tokens: (_d = (_c = response.usage) == null ? void 0 : _c.total_tokens) != null ? _d : 0 },
113
+ response: { headers: responseHeaders, body: rawValue }
114
+ };
115
+ }
116
+ };
117
+ var voyageEmbeddingResponseSchema = z3.object({
118
+ data: z3.array(
119
+ z3.object({
120
+ embedding: z3.array(z3.number()),
121
+ index: z3.number()
122
+ })
123
+ ),
124
+ model: z3.string(),
125
+ usage: z3.object({
126
+ total_tokens: z3.number()
127
+ }).nullish()
128
+ });
129
+
130
+ // src/reranking/voyage-reranking-model.ts
131
+ import {
132
+ combineHeaders as combineHeaders2,
133
+ createJsonResponseHandler as createJsonResponseHandler2,
134
+ lazySchema as lazySchema2,
135
+ parseProviderOptions as parseProviderOptions2,
136
+ postJsonToApi as postJsonToApi2,
137
+ zodSchema as zodSchema2
138
+ } from "@ai-sdk/provider-utils";
139
+ import { z as z5 } from "zod/v4";
140
+
141
+ // src/reranking/voyage-reranking-model-options.ts
142
+ import {
143
+ lazySchema,
144
+ zodSchema
145
+ } from "@ai-sdk/provider-utils";
146
+ import { z as z4 } from "zod/v4";
147
+ var voyageRerankingModelOptionsSchema = lazySchema(
148
+ () => zodSchema(
149
+ z4.object({
150
+ returnDocuments: z4.boolean().optional(),
151
+ truncation: z4.boolean().optional()
152
+ })
153
+ )
154
+ );
155
+
156
+ // src/reranking/voyage-reranking-model.ts
157
+ var VoyageRerankingModel = class {
158
+ constructor(modelId, config) {
159
+ this.specificationVersion = "v4";
160
+ this.modelId = modelId;
161
+ this.config = config;
162
+ }
163
+ get provider() {
164
+ return this.config.provider;
165
+ }
166
+ async doRerank({
167
+ documents,
168
+ headers,
169
+ query,
170
+ topN,
171
+ abortSignal,
172
+ providerOptions
173
+ }) {
174
+ const rerankingOptions = await parseProviderOptions2({
175
+ provider: "voyage",
176
+ providerOptions,
177
+ schema: voyageRerankingModelOptionsSchema
178
+ });
179
+ const warnings = [];
180
+ if (documents.type === "object") {
181
+ warnings.push({
182
+ type: "compatibility",
183
+ feature: "object documents",
184
+ details: "Object documents are converted to strings."
185
+ });
186
+ }
187
+ const stringValues = documents.type === "text" ? documents.values : documents.values.map((value) => JSON.stringify(value));
188
+ const {
189
+ responseHeaders,
190
+ value: response,
191
+ rawValue
192
+ } = await postJsonToApi2({
193
+ url: `${this.config.baseURL}/rerank`,
194
+ headers: combineHeaders2(this.config.headers(), headers),
195
+ body: {
196
+ query,
197
+ documents: stringValues,
198
+ model: this.modelId,
199
+ top_k: topN,
200
+ return_documents: rerankingOptions == null ? void 0 : rerankingOptions.returnDocuments,
201
+ truncation: rerankingOptions == null ? void 0 : rerankingOptions.truncation
202
+ },
203
+ failedResponseHandler: voyageFailedResponseHandler,
204
+ successfulResponseHandler: createJsonResponseHandler2(
205
+ voyageRerankingResponseSchema
206
+ ),
207
+ abortSignal,
208
+ fetch: this.config.fetch
209
+ });
210
+ return {
211
+ ranking: response.data.map((result) => ({
212
+ index: result.index,
213
+ relevanceScore: result.relevance_score
214
+ })),
215
+ warnings,
216
+ response: {
217
+ headers: responseHeaders,
218
+ body: rawValue
219
+ }
220
+ };
221
+ }
222
+ };
223
+ var voyageRerankingResponseSchema = lazySchema2(
224
+ () => zodSchema2(
225
+ z5.object({
226
+ data: z5.array(
227
+ z5.object({
228
+ index: z5.number(),
229
+ relevance_score: z5.number()
230
+ })
231
+ )
232
+ })
233
+ )
234
+ );
235
+
236
+ // src/version.ts
237
+ var VERSION = true ? "0.0.0-cca10482-20260708215408" : "0.0.0-test";
238
+
239
+ // src/voyage-provider.ts
240
+ function createVoyage(options = {}) {
241
+ var _a;
242
+ const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : "https://api.voyageai.com/v1";
243
+ const getHeaders = () => withUserAgentSuffix(
244
+ {
245
+ Authorization: `Bearer ${loadApiKey({
246
+ apiKey: options.apiKey,
247
+ environmentVariableName: "VOYAGE_API_KEY",
248
+ description: "Voyage"
249
+ })}`,
250
+ ...options.headers
251
+ },
252
+ `ai-sdk/voyage/${VERSION}`
253
+ );
254
+ const createEmbeddingModel = (modelId) => new VoyageEmbeddingModel(modelId, {
255
+ provider: "voyage.embedding",
256
+ baseURL,
257
+ headers: getHeaders,
258
+ fetch: options.fetch
259
+ });
260
+ const createRerankingModel = (modelId) => new VoyageRerankingModel(modelId, {
261
+ provider: "voyage.reranking",
262
+ baseURL,
263
+ headers: getHeaders,
264
+ fetch: options.fetch
265
+ });
266
+ const provider = {
267
+ specificationVersion: "v4",
268
+ embedding: createEmbeddingModel,
269
+ embeddingModel: createEmbeddingModel,
270
+ textEmbedding: createEmbeddingModel,
271
+ textEmbeddingModel: createEmbeddingModel,
272
+ reranking: createRerankingModel,
273
+ rerankingModel: createRerankingModel,
274
+ languageModel: (modelId) => {
275
+ throw new NoSuchModelError({ modelId, modelType: "languageModel" });
276
+ },
277
+ imageModel: (modelId) => {
278
+ throw new NoSuchModelError({ modelId, modelType: "imageModel" });
279
+ }
280
+ };
281
+ return provider;
282
+ }
283
+ var voyage = createVoyage();
284
+ export {
285
+ VERSION,
286
+ createVoyage,
287
+ voyage
288
+ };
289
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/voyage-provider.ts","../src/voyage-embedding-model.ts","../src/voyage-embedding-model-options.ts","../src/voyage-error.ts","../src/reranking/voyage-reranking-model.ts","../src/reranking/voyage-reranking-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type EmbeddingModelV4,\n type RerankingModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { VoyageEmbeddingModel } from './voyage-embedding-model';\nimport type { VoyageEmbeddingModelId } from './voyage-embedding-model-options';\nimport type { VoyageRerankingModelId } from './reranking/voyage-reranking-model-options';\nimport { VoyageRerankingModel } from './reranking/voyage-reranking-model';\nimport { VERSION } from './version';\n\nexport interface VoyageProvider extends ProviderV4 {\n embedding(modelId: VoyageEmbeddingModelId): EmbeddingModelV4;\n embeddingModel(modelId: VoyageEmbeddingModelId): EmbeddingModelV4;\n textEmbedding(modelId: VoyageEmbeddingModelId): EmbeddingModelV4;\n textEmbeddingModel(modelId: VoyageEmbeddingModelId): EmbeddingModelV4;\n reranking(modelId: VoyageRerankingModelId): RerankingModelV4;\n rerankingModel(modelId: VoyageRerankingModelId): RerankingModelV4;\n}\n\nexport interface VoyageProviderSettings {\n baseURL?: string;\n apiKey?: string;\n headers?: Record<string, string>;\n fetch?: FetchFunction;\n}\n\nexport function createVoyage(\n options: VoyageProviderSettings = {},\n): VoyageProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? 'https://api.voyageai.com/v1';\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'VOYAGE_API_KEY',\n description: 'Voyage',\n })}`,\n ...options.headers,\n },\n `ai-sdk/voyage/${VERSION}`,\n );\n\n const createEmbeddingModel = (modelId: VoyageEmbeddingModelId) =>\n new VoyageEmbeddingModel(modelId, {\n provider: 'voyage.embedding',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createRerankingModel = (modelId: VoyageRerankingModelId) =>\n new VoyageRerankingModel(modelId, {\n provider: 'voyage.reranking',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider: VoyageProvider = {\n specificationVersion: 'v4' as const,\n embedding: createEmbeddingModel,\n embeddingModel: createEmbeddingModel,\n textEmbedding: createEmbeddingModel,\n textEmbeddingModel: createEmbeddingModel,\n reranking: createRerankingModel,\n rerankingModel: createRerankingModel,\n\n languageModel: (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'languageModel' });\n },\n\n imageModel: (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n },\n };\n\n return provider;\n}\n\nexport const voyage = createVoyage();\n","import {\n TooManyEmbeddingValuesForCallError,\n type EmbeddingModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n voyageEmbeddingModelOptions,\n type VoyageEmbeddingModelId,\n} from './voyage-embedding-model-options';\nimport { voyageFailedResponseHandler } from './voyage-error';\n\ntype VoyageEmbeddingConfig = {\n provider: string;\n baseURL: string;\n headers?: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n};\n\nexport class VoyageEmbeddingModel implements EmbeddingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: VoyageEmbeddingModelId;\n\n readonly maxEmbeddingsPerCall = 128;\n readonly supportsParallelCalls = true;\n\n private readonly config: VoyageEmbeddingConfig;\n\n static [WORKFLOW_SERIALIZE](model: VoyageEmbeddingModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: VoyageEmbeddingModelId;\n config: VoyageEmbeddingConfig;\n }) {\n return new VoyageEmbeddingModel(options.modelId, options.config);\n }\n\n constructor(modelId: VoyageEmbeddingModelId, config: VoyageEmbeddingConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV4['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>\n > {\n const embeddingOptions = await parseProviderOptions({\n provider: 'voyage',\n providerOptions,\n schema: voyageEmbeddingModelOptions,\n });\n\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values,\n });\n }\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/embeddings`,\n headers: combineHeaders(this.config.headers?.(), headers),\n body: {\n input: values,\n model: this.modelId,\n input_type: embeddingOptions?.inputType,\n truncation: embeddingOptions?.truncation,\n output_dimension: embeddingOptions?.outputDimension,\n output_dtype: embeddingOptions?.outputDtype,\n },\n failedResponseHandler: voyageFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n voyageEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n warnings: [],\n embeddings: response.data\n .sort((a, b) => a.index - b.index)\n .map(item => item.embedding),\n usage: { tokens: response.usage?.total_tokens ?? 0 },\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n\nconst voyageEmbeddingResponseSchema = z.object({\n data: z.array(\n z.object({\n embedding: z.array(z.number()),\n index: z.number(),\n }),\n ),\n model: z.string(),\n usage: z\n .object({\n total_tokens: z.number(),\n })\n .nullish(),\n});\n","import { z } from 'zod/v4';\n\nexport type VoyageEmbeddingModelId =\n | 'voyage-4-large'\n | 'voyage-4'\n | 'voyage-4-lite'\n | 'voyage-4-nano'\n | 'voyage-code-3.5'\n | 'voyage-code-3'\n | 'voyage-3-large'\n | 'voyage-3.5'\n | 'voyage-3.5-lite'\n | 'voyage-3'\n | 'voyage-3-lite'\n | 'voyage-finance-2'\n | 'voyage-law-2'\n | 'voyage-multilingual-2'\n | 'voyage-code-2'\n | 'voyage-2'\n | (string & {});\n\nexport const voyageEmbeddingModelOptions = z.object({\n inputType: z.enum(['query', 'document']).nullable().optional(),\n truncation: z.boolean().optional(),\n outputDimension: z.number().optional(),\n outputDtype: z\n .enum(['float', 'int8', 'uint8', 'binary', 'ubinary'])\n .optional(),\n});\n\nexport type VoyageEmbeddingModelOptions = z.infer<\n typeof voyageEmbeddingModelOptions\n>;\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst voyageErrorDataSchema = z.object({\n detail: z.string(),\n});\n\nexport type VoyageErrorData = z.infer<typeof voyageErrorDataSchema>;\n\nexport const voyageFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: voyageErrorDataSchema,\n errorToMessage: data => data.detail,\n});\n","import type { RerankingModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n zodSchema,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { voyageFailedResponseHandler } from '../voyage-error';\nimport {\n voyageRerankingModelOptionsSchema,\n type VoyageRerankingModelId,\n} from './voyage-reranking-model-options';\ntype VoyageRerankingConfig = {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n};\n\nexport class VoyageRerankingModel implements RerankingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: VoyageRerankingModelId;\n\n private readonly config: VoyageRerankingConfig;\n\n constructor(modelId: VoyageRerankingModelId, config: VoyageRerankingConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doRerank({\n documents,\n headers,\n query,\n topN,\n abortSignal,\n providerOptions,\n }: Parameters<RerankingModelV4['doRerank']>[0]): Promise<\n Awaited<ReturnType<RerankingModelV4['doRerank']>>\n > {\n const rerankingOptions = await parseProviderOptions({\n provider: 'voyage',\n providerOptions,\n schema: voyageRerankingModelOptionsSchema,\n });\n\n const warnings: SharedV4Warning[] = [];\n\n if (documents.type === 'object') {\n warnings.push({\n type: 'compatibility',\n feature: 'object documents',\n details: 'Object documents are converted to strings.',\n });\n }\n\n const stringValues =\n documents.type === 'text'\n ? documents.values\n : documents.values.map(value => JSON.stringify(value));\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/rerank`,\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n query,\n documents: stringValues,\n model: this.modelId,\n top_k: topN,\n return_documents: rerankingOptions?.returnDocuments,\n truncation: rerankingOptions?.truncation,\n },\n failedResponseHandler: voyageFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n voyageRerankingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n ranking: response.data.map(result => ({\n index: result.index,\n relevanceScore: result.relevance_score,\n })),\n warnings,\n response: {\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n\nconst voyageRerankingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n data: z.array(\n z.object({\n index: z.number(),\n relevance_score: z.number(),\n }),\n ),\n }),\n ),\n);\n","import {\n lazySchema,\n zodSchema,\n type FlexibleSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type VoyageRerankingModelId =\n | 'rerank-2.5'\n | 'rerank-2.5-lite'\n | 'rerank-2'\n | 'rerank-2-lite'\n | 'rerank-1'\n | 'rerank-lite-1'\n | (string & {});\n\nexport type VoyageRerankingModelOptions = {\n returnDocuments?: boolean;\n truncation?: boolean;\n};\n\nexport const voyageRerankingModelOptionsSchema: FlexibleSchema<VoyageRerankingModelOptions> =\n lazySchema(() =>\n zodSchema(\n z.object({\n returnDocuments: z.boolean().optional(),\n truncation: z.boolean().optional(),\n }),\n ),\n );\n","declare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["z","z","z","combineHeaders","createJsonResponseHandler","lazySchema","parseProviderOptions","postJsonToApi","zodSchema","z","z","parseProviderOptions","postJsonToApi","combineHeaders","createJsonResponseHandler","lazySchema","zodSchema","z"]}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@ai-sdk/voyage",
3
+ "version": "0.0.0-cca10482-20260708215408",
4
+ "type": "module",
5
+ "license": "Apache-2.0",
6
+ "sideEffects": false,
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "files": [
10
+ "dist/**/*",
11
+ "src",
12
+ "!src/**/*.test.ts",
13
+ "!src/**/*.test-d.ts",
14
+ "!src/**/__snapshots__",
15
+ "!src/**/__fixtures__",
16
+ "CHANGELOG.md",
17
+ "README.md"
18
+ ],
19
+ "exports": {
20
+ "./package.json": "./package.json",
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js",
24
+ "default": "./dist/index.js"
25
+ }
26
+ },
27
+ "dependencies": {
28
+ "@ai-sdk/provider": "0.0.0-cca10482-20260708215408",
29
+ "@ai-sdk/provider-utils": "0.0.0-cca10482-20260708215408"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "22.19.19",
33
+ "tsup": "^8.5.1",
34
+ "typescript": "5.8.3",
35
+ "zod": "3.25.76",
36
+ "@ai-sdk/test-server": "2.0.0",
37
+ "@vercel/ai-tsconfig": "0.0.0"
38
+ },
39
+ "peerDependencies": {
40
+ "zod": "^3.25.76 || ^4.1.8"
41
+ },
42
+ "engines": {
43
+ "node": ">=22"
44
+ },
45
+ "publishConfig": {
46
+ "access": "public",
47
+ "provenance": true
48
+ },
49
+ "homepage": "https://ai-sdk.dev/docs",
50
+ "repository": {
51
+ "type": "git",
52
+ "url": "https://github.com/vercel/ai",
53
+ "directory": "packages/voyage"
54
+ },
55
+ "bugs": {
56
+ "url": "https://github.com/vercel/ai/issues"
57
+ },
58
+ "keywords": [
59
+ "ai"
60
+ ],
61
+ "scripts": {
62
+ "build": "pnpm clean && tsup --tsconfig tsconfig.build.json",
63
+ "build:watch": "pnpm clean && tsup --watch",
64
+ "clean": "del-cli dist *.tsbuildinfo",
65
+ "type-check": "tsc --build",
66
+ "test": "pnpm test:node && pnpm test:edge",
67
+ "test:update": "pnpm test:node -u",
68
+ "test:watch": "vitest --config vitest.node.config.js",
69
+ "test:edge": "vitest --config vitest.edge.config.js --run",
70
+ "test:node": "vitest --config vitest.node.config.js --run"
71
+ }
72
+ }
package/src/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ export { voyage, createVoyage } from './voyage-provider';
2
+ export type { VoyageProvider, VoyageProviderSettings } from './voyage-provider';
3
+ export type { VoyageEmbeddingModelOptions } from './voyage-embedding-model-options';
4
+ export type { VoyageRerankingModelOptions } from './reranking/voyage-reranking-model-options';
5
+ export { VERSION } from './version';
@@ -0,0 +1,30 @@
1
+ import {
2
+ lazySchema,
3
+ zodSchema,
4
+ type FlexibleSchema,
5
+ } from '@ai-sdk/provider-utils';
6
+ import { z } from 'zod/v4';
7
+
8
+ export type VoyageRerankingModelId =
9
+ | 'rerank-2.5'
10
+ | 'rerank-2.5-lite'
11
+ | 'rerank-2'
12
+ | 'rerank-2-lite'
13
+ | 'rerank-1'
14
+ | 'rerank-lite-1'
15
+ | (string & {});
16
+
17
+ export type VoyageRerankingModelOptions = {
18
+ returnDocuments?: boolean;
19
+ truncation?: boolean;
20
+ };
21
+
22
+ export const voyageRerankingModelOptionsSchema: FlexibleSchema<VoyageRerankingModelOptions> =
23
+ lazySchema(() =>
24
+ zodSchema(
25
+ z.object({
26
+ returnDocuments: z.boolean().optional(),
27
+ truncation: z.boolean().optional(),
28
+ }),
29
+ ),
30
+ );
@@ -0,0 +1,118 @@
1
+ import type { RerankingModelV4, SharedV4Warning } from '@ai-sdk/provider';
2
+ import {
3
+ combineHeaders,
4
+ createJsonResponseHandler,
5
+ lazySchema,
6
+ parseProviderOptions,
7
+ postJsonToApi,
8
+ zodSchema,
9
+ type FetchFunction,
10
+ } from '@ai-sdk/provider-utils';
11
+ import { z } from 'zod/v4';
12
+ import { voyageFailedResponseHandler } from '../voyage-error';
13
+ import {
14
+ voyageRerankingModelOptionsSchema,
15
+ type VoyageRerankingModelId,
16
+ } from './voyage-reranking-model-options';
17
+ type VoyageRerankingConfig = {
18
+ provider: string;
19
+ baseURL: string;
20
+ headers: () => Record<string, string | undefined>;
21
+ fetch?: FetchFunction;
22
+ };
23
+
24
+ export class VoyageRerankingModel implements RerankingModelV4 {
25
+ readonly specificationVersion = 'v4';
26
+ readonly modelId: VoyageRerankingModelId;
27
+
28
+ private readonly config: VoyageRerankingConfig;
29
+
30
+ constructor(modelId: VoyageRerankingModelId, config: VoyageRerankingConfig) {
31
+ this.modelId = modelId;
32
+ this.config = config;
33
+ }
34
+
35
+ get provider(): string {
36
+ return this.config.provider;
37
+ }
38
+
39
+ async doRerank({
40
+ documents,
41
+ headers,
42
+ query,
43
+ topN,
44
+ abortSignal,
45
+ providerOptions,
46
+ }: Parameters<RerankingModelV4['doRerank']>[0]): Promise<
47
+ Awaited<ReturnType<RerankingModelV4['doRerank']>>
48
+ > {
49
+ const rerankingOptions = await parseProviderOptions({
50
+ provider: 'voyage',
51
+ providerOptions,
52
+ schema: voyageRerankingModelOptionsSchema,
53
+ });
54
+
55
+ const warnings: SharedV4Warning[] = [];
56
+
57
+ if (documents.type === 'object') {
58
+ warnings.push({
59
+ type: 'compatibility',
60
+ feature: 'object documents',
61
+ details: 'Object documents are converted to strings.',
62
+ });
63
+ }
64
+
65
+ const stringValues =
66
+ documents.type === 'text'
67
+ ? documents.values
68
+ : documents.values.map(value => JSON.stringify(value));
69
+
70
+ const {
71
+ responseHeaders,
72
+ value: response,
73
+ rawValue,
74
+ } = await postJsonToApi({
75
+ url: `${this.config.baseURL}/rerank`,
76
+ headers: combineHeaders(this.config.headers(), headers),
77
+ body: {
78
+ query,
79
+ documents: stringValues,
80
+ model: this.modelId,
81
+ top_k: topN,
82
+ return_documents: rerankingOptions?.returnDocuments,
83
+ truncation: rerankingOptions?.truncation,
84
+ },
85
+ failedResponseHandler: voyageFailedResponseHandler,
86
+ successfulResponseHandler: createJsonResponseHandler(
87
+ voyageRerankingResponseSchema,
88
+ ),
89
+ abortSignal,
90
+ fetch: this.config.fetch,
91
+ });
92
+
93
+ return {
94
+ ranking: response.data.map(result => ({
95
+ index: result.index,
96
+ relevanceScore: result.relevance_score,
97
+ })),
98
+ warnings,
99
+ response: {
100
+ headers: responseHeaders,
101
+ body: rawValue,
102
+ },
103
+ };
104
+ }
105
+ }
106
+
107
+ const voyageRerankingResponseSchema = lazySchema(() =>
108
+ zodSchema(
109
+ z.object({
110
+ data: z.array(
111
+ z.object({
112
+ index: z.number(),
113
+ relevance_score: z.number(),
114
+ }),
115
+ ),
116
+ }),
117
+ ),
118
+ );
package/src/version.ts ADDED
@@ -0,0 +1,5 @@
1
+ declare const __PACKAGE_VERSION__: string | undefined;
2
+ export const VERSION: string =
3
+ typeof __PACKAGE_VERSION__ !== 'undefined'
4
+ ? __PACKAGE_VERSION__
5
+ : '0.0.0-test';
@@ -0,0 +1,33 @@
1
+ import { z } from 'zod/v4';
2
+
3
+ export type VoyageEmbeddingModelId =
4
+ | 'voyage-4-large'
5
+ | 'voyage-4'
6
+ | 'voyage-4-lite'
7
+ | 'voyage-4-nano'
8
+ | 'voyage-code-3.5'
9
+ | 'voyage-code-3'
10
+ | 'voyage-3-large'
11
+ | 'voyage-3.5'
12
+ | 'voyage-3.5-lite'
13
+ | 'voyage-3'
14
+ | 'voyage-3-lite'
15
+ | 'voyage-finance-2'
16
+ | 'voyage-law-2'
17
+ | 'voyage-multilingual-2'
18
+ | 'voyage-code-2'
19
+ | 'voyage-2'
20
+ | (string & {});
21
+
22
+ export const voyageEmbeddingModelOptions = z.object({
23
+ inputType: z.enum(['query', 'document']).nullable().optional(),
24
+ truncation: z.boolean().optional(),
25
+ outputDimension: z.number().optional(),
26
+ outputDtype: z
27
+ .enum(['float', 'int8', 'uint8', 'binary', 'ubinary'])
28
+ .optional(),
29
+ });
30
+
31
+ export type VoyageEmbeddingModelOptions = z.infer<
32
+ typeof voyageEmbeddingModelOptions
33
+ >;
@@ -0,0 +1,131 @@
1
+ import {
2
+ TooManyEmbeddingValuesForCallError,
3
+ type EmbeddingModelV4,
4
+ } from '@ai-sdk/provider';
5
+ import {
6
+ combineHeaders,
7
+ createJsonResponseHandler,
8
+ parseProviderOptions,
9
+ postJsonToApi,
10
+ serializeModelOptions,
11
+ WORKFLOW_SERIALIZE,
12
+ WORKFLOW_DESERIALIZE,
13
+ type FetchFunction,
14
+ } from '@ai-sdk/provider-utils';
15
+ import { z } from 'zod/v4';
16
+ import {
17
+ voyageEmbeddingModelOptions,
18
+ type VoyageEmbeddingModelId,
19
+ } from './voyage-embedding-model-options';
20
+ import { voyageFailedResponseHandler } from './voyage-error';
21
+
22
+ type VoyageEmbeddingConfig = {
23
+ provider: string;
24
+ baseURL: string;
25
+ headers?: () => Record<string, string | undefined>;
26
+ fetch?: FetchFunction;
27
+ };
28
+
29
+ export class VoyageEmbeddingModel implements EmbeddingModelV4 {
30
+ readonly specificationVersion = 'v4';
31
+ readonly modelId: VoyageEmbeddingModelId;
32
+
33
+ readonly maxEmbeddingsPerCall = 128;
34
+ readonly supportsParallelCalls = true;
35
+
36
+ private readonly config: VoyageEmbeddingConfig;
37
+
38
+ static [WORKFLOW_SERIALIZE](model: VoyageEmbeddingModel) {
39
+ return serializeModelOptions({
40
+ modelId: model.modelId,
41
+ config: model.config,
42
+ });
43
+ }
44
+
45
+ static [WORKFLOW_DESERIALIZE](options: {
46
+ modelId: VoyageEmbeddingModelId;
47
+ config: VoyageEmbeddingConfig;
48
+ }) {
49
+ return new VoyageEmbeddingModel(options.modelId, options.config);
50
+ }
51
+
52
+ constructor(modelId: VoyageEmbeddingModelId, config: VoyageEmbeddingConfig) {
53
+ this.modelId = modelId;
54
+ this.config = config;
55
+ }
56
+
57
+ get provider(): string {
58
+ return this.config.provider;
59
+ }
60
+
61
+ async doEmbed({
62
+ values,
63
+ headers,
64
+ abortSignal,
65
+ providerOptions,
66
+ }: Parameters<EmbeddingModelV4['doEmbed']>[0]): Promise<
67
+ Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>
68
+ > {
69
+ const embeddingOptions = await parseProviderOptions({
70
+ provider: 'voyage',
71
+ providerOptions,
72
+ schema: voyageEmbeddingModelOptions,
73
+ });
74
+
75
+ if (values.length > this.maxEmbeddingsPerCall) {
76
+ throw new TooManyEmbeddingValuesForCallError({
77
+ provider: this.provider,
78
+ modelId: this.modelId,
79
+ maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,
80
+ values,
81
+ });
82
+ }
83
+
84
+ const {
85
+ responseHeaders,
86
+ value: response,
87
+ rawValue,
88
+ } = await postJsonToApi({
89
+ url: `${this.config.baseURL}/embeddings`,
90
+ headers: combineHeaders(this.config.headers?.(), headers),
91
+ body: {
92
+ input: values,
93
+ model: this.modelId,
94
+ input_type: embeddingOptions?.inputType,
95
+ truncation: embeddingOptions?.truncation,
96
+ output_dimension: embeddingOptions?.outputDimension,
97
+ output_dtype: embeddingOptions?.outputDtype,
98
+ },
99
+ failedResponseHandler: voyageFailedResponseHandler,
100
+ successfulResponseHandler: createJsonResponseHandler(
101
+ voyageEmbeddingResponseSchema,
102
+ ),
103
+ abortSignal,
104
+ fetch: this.config.fetch,
105
+ });
106
+
107
+ return {
108
+ warnings: [],
109
+ embeddings: response.data
110
+ .sort((a, b) => a.index - b.index)
111
+ .map(item => item.embedding),
112
+ usage: { tokens: response.usage?.total_tokens ?? 0 },
113
+ response: { headers: responseHeaders, body: rawValue },
114
+ };
115
+ }
116
+ }
117
+
118
+ const voyageEmbeddingResponseSchema = z.object({
119
+ data: z.array(
120
+ z.object({
121
+ embedding: z.array(z.number()),
122
+ index: z.number(),
123
+ }),
124
+ ),
125
+ model: z.string(),
126
+ usage: z
127
+ .object({
128
+ total_tokens: z.number(),
129
+ })
130
+ .nullish(),
131
+ });
@@ -0,0 +1,13 @@
1
+ import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';
2
+ import { z } from 'zod/v4';
3
+
4
+ const voyageErrorDataSchema = z.object({
5
+ detail: z.string(),
6
+ });
7
+
8
+ export type VoyageErrorData = z.infer<typeof voyageErrorDataSchema>;
9
+
10
+ export const voyageFailedResponseHandler = createJsonErrorResponseHandler({
11
+ errorSchema: voyageErrorDataSchema,
12
+ errorToMessage: data => data.detail,
13
+ });
@@ -0,0 +1,91 @@
1
+ import {
2
+ NoSuchModelError,
3
+ type EmbeddingModelV4,
4
+ type RerankingModelV4,
5
+ type ProviderV4,
6
+ } from '@ai-sdk/provider';
7
+ import {
8
+ loadApiKey,
9
+ withoutTrailingSlash,
10
+ withUserAgentSuffix,
11
+ type FetchFunction,
12
+ } from '@ai-sdk/provider-utils';
13
+ import { VoyageEmbeddingModel } from './voyage-embedding-model';
14
+ import type { VoyageEmbeddingModelId } from './voyage-embedding-model-options';
15
+ import type { VoyageRerankingModelId } from './reranking/voyage-reranking-model-options';
16
+ import { VoyageRerankingModel } from './reranking/voyage-reranking-model';
17
+ import { VERSION } from './version';
18
+
19
+ export interface VoyageProvider extends ProviderV4 {
20
+ embedding(modelId: VoyageEmbeddingModelId): EmbeddingModelV4;
21
+ embeddingModel(modelId: VoyageEmbeddingModelId): EmbeddingModelV4;
22
+ textEmbedding(modelId: VoyageEmbeddingModelId): EmbeddingModelV4;
23
+ textEmbeddingModel(modelId: VoyageEmbeddingModelId): EmbeddingModelV4;
24
+ reranking(modelId: VoyageRerankingModelId): RerankingModelV4;
25
+ rerankingModel(modelId: VoyageRerankingModelId): RerankingModelV4;
26
+ }
27
+
28
+ export interface VoyageProviderSettings {
29
+ baseURL?: string;
30
+ apiKey?: string;
31
+ headers?: Record<string, string>;
32
+ fetch?: FetchFunction;
33
+ }
34
+
35
+ export function createVoyage(
36
+ options: VoyageProviderSettings = {},
37
+ ): VoyageProvider {
38
+ const baseURL =
39
+ withoutTrailingSlash(options.baseURL) ?? 'https://api.voyageai.com/v1';
40
+
41
+ const getHeaders = () =>
42
+ withUserAgentSuffix(
43
+ {
44
+ Authorization: `Bearer ${loadApiKey({
45
+ apiKey: options.apiKey,
46
+ environmentVariableName: 'VOYAGE_API_KEY',
47
+ description: 'Voyage',
48
+ })}`,
49
+ ...options.headers,
50
+ },
51
+ `ai-sdk/voyage/${VERSION}`,
52
+ );
53
+
54
+ const createEmbeddingModel = (modelId: VoyageEmbeddingModelId) =>
55
+ new VoyageEmbeddingModel(modelId, {
56
+ provider: 'voyage.embedding',
57
+ baseURL,
58
+ headers: getHeaders,
59
+ fetch: options.fetch,
60
+ });
61
+
62
+ const createRerankingModel = (modelId: VoyageRerankingModelId) =>
63
+ new VoyageRerankingModel(modelId, {
64
+ provider: 'voyage.reranking',
65
+ baseURL,
66
+ headers: getHeaders,
67
+ fetch: options.fetch,
68
+ });
69
+
70
+ const provider: VoyageProvider = {
71
+ specificationVersion: 'v4' as const,
72
+ embedding: createEmbeddingModel,
73
+ embeddingModel: createEmbeddingModel,
74
+ textEmbedding: createEmbeddingModel,
75
+ textEmbeddingModel: createEmbeddingModel,
76
+ reranking: createRerankingModel,
77
+ rerankingModel: createRerankingModel,
78
+
79
+ languageModel: (modelId: string) => {
80
+ throw new NoSuchModelError({ modelId, modelType: 'languageModel' });
81
+ },
82
+
83
+ imageModel: (modelId: string) => {
84
+ throw new NoSuchModelError({ modelId, modelType: 'imageModel' });
85
+ },
86
+ };
87
+
88
+ return provider;
89
+ }
90
+
91
+ export const voyage = createVoyage();