@ai-sdk/voyage 0.0.0-07500555-20260730161446

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,335 @@
1
+ # @ai-sdk/voyage
2
+
3
+ ## 0.0.0-07500555-20260730161446
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [589d87c]
8
+ - @ai-sdk/provider@0.0.0-07500555-20260730161446
9
+ - @ai-sdk/provider-utils@0.0.0-07500555-20260730161446
10
+
11
+ ## 2.0.12
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [02ffdcb]
16
+ - Updated dependencies [76cb673]
17
+ - @ai-sdk/provider-utils@5.0.12
18
+
19
+ ## 2.0.11
20
+
21
+ ### Patch Changes
22
+
23
+ - Updated dependencies [cd06458]
24
+ - @ai-sdk/provider-utils@5.0.11
25
+
26
+ ## 2.0.10
27
+
28
+ ### Patch Changes
29
+
30
+ - Updated dependencies [31c7be8]
31
+ - @ai-sdk/provider-utils@5.0.10
32
+
33
+ ## 2.0.9
34
+
35
+ ### Patch Changes
36
+
37
+ - Updated dependencies [4be62c1]
38
+ - Updated dependencies [7805e4a]
39
+ - Updated dependencies [cd12954]
40
+ - @ai-sdk/provider-utils@5.0.9
41
+
42
+ ## 2.0.8
43
+
44
+ ### Patch Changes
45
+
46
+ - Updated dependencies [e193290]
47
+ - @ai-sdk/provider-utils@5.0.8
48
+
49
+ ## 2.0.7
50
+
51
+ ### Patch Changes
52
+
53
+ - Updated dependencies [0f93c57]
54
+ - @ai-sdk/provider@4.0.3
55
+ - @ai-sdk/provider-utils@5.0.7
56
+
57
+ ## 2.0.6
58
+
59
+ ### Patch Changes
60
+
61
+ - Updated dependencies [ac306ed]
62
+ - @ai-sdk/provider-utils@5.0.6
63
+
64
+ ## 2.0.5
65
+
66
+ ### Patch Changes
67
+
68
+ - 5c5c0f5: Add experimental streaming transcription support for transcription models, including OpenAI `gpt-realtime-whisper` and xAI WebSocket STT.
69
+ - Updated dependencies [5c5c0f5]
70
+ - @ai-sdk/provider@4.0.2
71
+ - @ai-sdk/provider-utils@5.0.5
72
+
73
+ ## 2.0.4
74
+
75
+ ### Patch Changes
76
+
77
+ - Updated dependencies [c6f5e62]
78
+ - @ai-sdk/provider-utils@5.0.4
79
+
80
+ ## 2.0.3
81
+
82
+ ### Patch Changes
83
+
84
+ - Updated dependencies [8c616f0]
85
+ - @ai-sdk/provider-utils@5.0.3
86
+
87
+ ## 2.0.2
88
+
89
+ ### Patch Changes
90
+
91
+ - Updated dependencies [0274f34]
92
+ - @ai-sdk/provider@4.0.1
93
+ - @ai-sdk/provider-utils@5.0.2
94
+
95
+ ## 2.0.1
96
+
97
+ ### Patch Changes
98
+
99
+ - Updated dependencies [6a436e3]
100
+ - @ai-sdk/provider-utils@5.0.1
101
+
102
+ ## 2.0.0
103
+
104
+ ### Major Changes
105
+
106
+ - 4963f11: add voyage ai provider with embedding and reranking support
107
+ - 04e9009: chore: make provider implementations code patterns more consistent, including renaming certain exported symbols
108
+
109
+ For all externally exported symbols that were renamed, the old names continue to work via deprecated aliases.
110
+
111
+ ### Patch Changes
112
+
113
+ - 9f0e36c: trigger release for all packages after provenance setup
114
+ - 7fc6bd6: Raise minimum supported Node.js version to 22. Supported versions: 22, 24, and 26.
115
+ - 0c4c275: trigger initial canary release
116
+ - 258c093: chore: ensure consistent import handling and avoid import duplicates or cycles
117
+ - b8396f0: trigger initial beta release
118
+ - c25eb7a: chore(voyage): trigger canary release at 2.0.0
119
+
120
+ ## 2.0.0-beta.25
121
+
122
+ ### Patch Changes
123
+
124
+ - Updated dependencies [0416e3e]
125
+ - @ai-sdk/provider@4.0.0-beta.20
126
+ - @ai-sdk/provider-utils@5.0.0-beta.50
127
+
128
+ ## 2.0.0-beta.24
129
+
130
+ ### Patch Changes
131
+
132
+ - b8396f0: trigger initial beta release
133
+ - Updated dependencies [b8396f0]
134
+ - @ai-sdk/provider-utils@5.0.0-beta.49
135
+ - @ai-sdk/provider@4.0.0-beta.19
136
+
137
+ ## 2.0.0-canary.23
138
+
139
+ ### Patch Changes
140
+
141
+ - Updated dependencies [aeda373]
142
+ - Updated dependencies [375fdd7]
143
+ - Updated dependencies [b4507d5]
144
+ - @ai-sdk/provider-utils@5.0.0-canary.48
145
+
146
+ ## 2.0.0-canary.22
147
+
148
+ ### Patch Changes
149
+
150
+ - Updated dependencies [bae5e2b]
151
+ - @ai-sdk/provider-utils@5.0.0-canary.47
152
+
153
+ ## 2.0.0-canary.21
154
+
155
+ ### Patch Changes
156
+
157
+ - Updated dependencies [ce769dd]
158
+ - @ai-sdk/provider@4.0.0-canary.18
159
+ - @ai-sdk/provider-utils@5.0.0-canary.46
160
+
161
+ ## 2.0.0-canary.20
162
+
163
+ ### Patch Changes
164
+
165
+ - Updated dependencies [ee798eb]
166
+ - Updated dependencies [daf6637]
167
+ - @ai-sdk/provider-utils@5.0.0-canary.45
168
+
169
+ ## 2.0.0-canary.19
170
+
171
+ ### Patch Changes
172
+
173
+ - Updated dependencies [6c93e36]
174
+ - Updated dependencies [f617ac2]
175
+ - @ai-sdk/provider-utils@5.0.0-canary.44
176
+
177
+ ## 2.0.0-canary.18
178
+
179
+ ### Patch Changes
180
+
181
+ - 7fc6bd6: Raise minimum supported Node.js version to 22. Supported versions: 22, 24, and 26.
182
+ - Updated dependencies [7fc6bd6]
183
+ - @ai-sdk/provider-utils@5.0.0-canary.43
184
+ - @ai-sdk/provider@4.0.0-canary.17
185
+
186
+ ## 2.0.0-canary.17
187
+
188
+ ### Patch Changes
189
+
190
+ - Updated dependencies [a6617c5]
191
+ - @ai-sdk/provider-utils@5.0.0-canary.42
192
+
193
+ ## 2.0.0-canary.16
194
+
195
+ ### Patch Changes
196
+
197
+ - Updated dependencies [28dfa06]
198
+ - Updated dependencies [e93fa91]
199
+ - @ai-sdk/provider-utils@5.0.0-canary.41
200
+
201
+ ## 2.0.0-canary.15
202
+
203
+ ### Patch Changes
204
+
205
+ - Updated dependencies [a7de9c9]
206
+ - @ai-sdk/provider-utils@5.0.0-canary.40
207
+
208
+ ## 2.0.0-canary.14
209
+
210
+ ### Patch Changes
211
+
212
+ - Updated dependencies [105f95b]
213
+ - @ai-sdk/provider-utils@5.0.0-canary.39
214
+
215
+ ## 2.0.0-canary.13
216
+
217
+ ### Patch Changes
218
+
219
+ - Updated dependencies [ca446f8]
220
+ - @ai-sdk/provider-utils@5.0.0-canary.38
221
+
222
+ ## 2.0.0-canary.12
223
+
224
+ ### Patch Changes
225
+
226
+ - Updated dependencies [d848405]
227
+ - @ai-sdk/provider-utils@5.0.0-canary.37
228
+
229
+ ## 2.0.0-canary.11
230
+
231
+ ### Patch Changes
232
+
233
+ - Updated dependencies [ca39020]
234
+ - @ai-sdk/provider-utils@5.0.0-canary.36
235
+
236
+ ## 2.0.0-canary.10
237
+
238
+ ### Patch Changes
239
+
240
+ - Updated dependencies [f634bac]
241
+ - @ai-sdk/provider-utils@5.0.0-canary.35
242
+
243
+ ## 2.0.0-canary.9
244
+
245
+ ### Patch Changes
246
+
247
+ - Updated dependencies [69254e0]
248
+ - Updated dependencies [3015fc3]
249
+ - @ai-sdk/provider-utils@5.0.0-canary.34
250
+
251
+ ## 2.0.0-canary.8
252
+
253
+ ### Patch Changes
254
+
255
+ - c25eb7a: chore(voyage): trigger canary release at 2.0.0
256
+
257
+ ## 1.0.0-canary.7
258
+
259
+ ### Patch Changes
260
+
261
+ - Updated dependencies [2427d88]
262
+ - @ai-sdk/provider-utils@5.0.0-canary.33
263
+
264
+ ## 1.0.0-canary.6
265
+
266
+ ### Patch Changes
267
+
268
+ - Updated dependencies [5463d0d]
269
+ - @ai-sdk/provider-utils@5.0.0-canary.32
270
+ - @ai-sdk/provider@4.0.0-canary.16
271
+
272
+ ## 1.0.0-canary.5
273
+
274
+ ### Patch Changes
275
+
276
+ - 0c4c275: trigger initial canary release
277
+ - Updated dependencies [0c4c275]
278
+ - @ai-sdk/provider-utils@5.0.0-canary.31
279
+ - @ai-sdk/provider@4.0.0-canary.15
280
+
281
+ ## 1.0.0-beta.4
282
+
283
+ ### Major Changes
284
+
285
+ - 04e9009: chore: make provider implementations code patterns more consistent, including renaming certain exported symbols
286
+
287
+ For all externally exported symbols that were renamed, the old names continue to work via deprecated aliases.
288
+
289
+ ### Patch Changes
290
+
291
+ - Updated dependencies [08d2129]
292
+ - @ai-sdk/provider-utils@5.0.0-beta.30
293
+
294
+ ## 1.0.0-beta.3
295
+
296
+ ### Patch Changes
297
+
298
+ - 258c093: chore: ensure consistent import handling and avoid import duplicates or cycles
299
+ - Updated dependencies [9bd6512]
300
+ - Updated dependencies [258c093]
301
+ - Updated dependencies [b6783da]
302
+ - @ai-sdk/provider-utils@5.0.0-beta.29
303
+ - @ai-sdk/provider@4.0.0-beta.14
304
+
305
+ ## 1.0.0-beta.2
306
+
307
+ ### Patch Changes
308
+
309
+ - 9f0e36c: trigger release for all packages after provenance setup
310
+ - Updated dependencies [9f0e36c]
311
+ - @ai-sdk/provider@4.0.0-beta.13
312
+ - @ai-sdk/provider-utils@5.0.0-beta.28
313
+
314
+ ## 1.0.0-beta.1
315
+
316
+ ### Patch Changes
317
+
318
+ - Updated dependencies [785fe16]
319
+ - Updated dependencies [67df0a0]
320
+ - Updated dependencies [befb78c]
321
+ - Updated dependencies [0458559]
322
+ - Updated dependencies [5852c0a]
323
+ - Updated dependencies [fc92055]
324
+ - @ai-sdk/provider-utils@5.0.0-beta.27
325
+
326
+ ## 1.0.0-beta.0
327
+
328
+ ### Major Changes
329
+
330
+ - 4963f11: add voyage ai provider with embedding and reranking support
331
+
332
+ ### Patch Changes
333
+
334
+ - Updated dependencies [2e98477]
335
+ - @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-07500555-20260730161446" : "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-07500555-20260730161446",
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-07500555-20260730161446",
29
+ "@ai-sdk/provider-utils": "0.0.0-07500555-20260730161446"
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();