@ai-sdk/deepseek 1.0.0-canary.8 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,501 @@
1
1
  # @ai-sdk/deepseek
2
2
 
3
+ ## 1.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - d5f588f: AI SDK 5
8
+
9
+ ### Patch Changes
10
+
11
+ - fa49207: feat(providers/openai-compatible): convert to providerOptions
12
+ - e2aceaf: feat: add raw chunk support
13
+ - d1a034f: feature: using Zod 4 for internal stuff
14
+ - 205077b: fix: improve Zod compatibility
15
+ - Updated dependencies [a571d6e]
16
+ - Updated dependencies [742b7be]
17
+ - Updated dependencies [e7fcc86]
18
+ - Updated dependencies [7cddb72]
19
+ - Updated dependencies [ccce59b]
20
+ - Updated dependencies [e2b9e4b]
21
+ - Updated dependencies [95857aa]
22
+ - Updated dependencies [45c1ea2]
23
+ - Updated dependencies [6f6bb89]
24
+ - Updated dependencies [060370c]
25
+ - Updated dependencies [dc714f3]
26
+ - Updated dependencies [b5da06a]
27
+ - Updated dependencies [d1a1aa1]
28
+ - Updated dependencies [63f9e9b]
29
+ - Updated dependencies [5d142ab]
30
+ - Updated dependencies [d5f588f]
31
+ - Updated dependencies [e025824]
32
+ - Updated dependencies [0571b98]
33
+ - Updated dependencies [6db02c9]
34
+ - Updated dependencies [b6b43c7]
35
+ - Updated dependencies [4fef487]
36
+ - Updated dependencies [48d257a]
37
+ - Updated dependencies [0c0c0b3]
38
+ - Updated dependencies [0d2c085]
39
+ - Updated dependencies [fa49207]
40
+ - Updated dependencies [40acf9b]
41
+ - Updated dependencies [cf8280e]
42
+ - Updated dependencies [9222aeb]
43
+ - Updated dependencies [b9a6121]
44
+ - Updated dependencies [e2aceaf]
45
+ - Updated dependencies [411e483]
46
+ - Updated dependencies [8ba77a7]
47
+ - Updated dependencies [db72adc]
48
+ - Updated dependencies [7b3ae3f]
49
+ - Updated dependencies [a166433]
50
+ - Updated dependencies [26735b5]
51
+ - Updated dependencies [443d8ec]
52
+ - Updated dependencies [42e32b0]
53
+ - Updated dependencies [a8c8bd5]
54
+ - Updated dependencies [abf9a79]
55
+ - Updated dependencies [14c9410]
56
+ - Updated dependencies [e86be6f]
57
+ - Updated dependencies [9bf7291]
58
+ - Updated dependencies [2e13791]
59
+ - Updated dependencies [7b069ed]
60
+ - Updated dependencies [9f95b35]
61
+ - Updated dependencies [66962ed]
62
+ - Updated dependencies [0d06df6]
63
+ - Updated dependencies [472524a]
64
+ - Updated dependencies [dd3ff01]
65
+ - Updated dependencies [d9209ca]
66
+ - Updated dependencies [d9c98f4]
67
+ - Updated dependencies [05d2819]
68
+ - Updated dependencies [9301f86]
69
+ - Updated dependencies [0a87932]
70
+ - Updated dependencies [737f1e2]
71
+ - Updated dependencies [c4a2fec]
72
+ - Updated dependencies [957b739]
73
+ - Updated dependencies [79457bd]
74
+ - Updated dependencies [a3f768e]
75
+ - Updated dependencies [7435eb5]
76
+ - Updated dependencies [8aa9e20]
77
+ - Updated dependencies [4617fab]
78
+ - Updated dependencies [516be5b]
79
+ - Updated dependencies [ac34802]
80
+ - Updated dependencies [0054544]
81
+ - Updated dependencies [cb68df0]
82
+ - Updated dependencies [ad80501]
83
+ - Updated dependencies [68ecf2f]
84
+ - Updated dependencies [9e9c809]
85
+ - Updated dependencies [32831c6]
86
+ - Updated dependencies [6dc848c]
87
+ - Updated dependencies [6b98118]
88
+ - Updated dependencies [d0f9495]
89
+ - Updated dependencies [63d791d]
90
+ - Updated dependencies [87b828f]
91
+ - Updated dependencies [3f2f00c]
92
+ - Updated dependencies [bfdca8d]
93
+ - Updated dependencies [0ff02bb]
94
+ - Updated dependencies [7979f7f]
95
+ - Updated dependencies [39a4fab]
96
+ - Updated dependencies [44f4aba]
97
+ - Updated dependencies [9bd5ab5]
98
+ - Updated dependencies [57edfcb]
99
+ - Updated dependencies [faf8446]
100
+ - Updated dependencies [7ea4132]
101
+ - Updated dependencies [d1a034f]
102
+ - Updated dependencies [5c56081]
103
+ - Updated dependencies [fd65bc6]
104
+ - Updated dependencies [023ba40]
105
+ - Updated dependencies [ea7a7c9]
106
+ - Updated dependencies [1b101e1]
107
+ - Updated dependencies [26535e0]
108
+ - Updated dependencies [e030615]
109
+ - Updated dependencies [5e57fae]
110
+ - Updated dependencies [393138b]
111
+ - Updated dependencies [c57e248]
112
+ - Updated dependencies [88a8ee5]
113
+ - Updated dependencies [41fa418]
114
+ - Updated dependencies [205077b]
115
+ - Updated dependencies [71f938d]
116
+ - Updated dependencies [3795467]
117
+ - Updated dependencies [28a5ed5]
118
+ - Updated dependencies [7182d14]
119
+ - Updated dependencies [c1e6647]
120
+ - Updated dependencies [1766ede]
121
+ - Updated dependencies [811dff3]
122
+ - Updated dependencies [f10304b]
123
+ - Updated dependencies [dd5fd43]
124
+ - Updated dependencies [33f4a6a]
125
+ - Updated dependencies [383cbfa]
126
+ - Updated dependencies [27deb4d]
127
+ - Updated dependencies [c4df419]
128
+ - Updated dependencies [281bb1c]
129
+ - @ai-sdk/provider-utils@3.0.0
130
+ - @ai-sdk/provider@2.0.0
131
+ - @ai-sdk/openai-compatible@1.0.0
132
+
133
+ ## 1.0.0-beta.13
134
+
135
+ ### Patch Changes
136
+
137
+ - Updated dependencies [88a8ee5]
138
+ - @ai-sdk/provider-utils@3.0.0-beta.10
139
+ - @ai-sdk/openai-compatible@1.0.0-beta.13
140
+
141
+ ## 1.0.0-beta.12
142
+
143
+ ### Patch Changes
144
+
145
+ - Updated dependencies [27deb4d]
146
+ - @ai-sdk/provider@2.0.0-beta.2
147
+ - @ai-sdk/openai-compatible@1.0.0-beta.12
148
+ - @ai-sdk/provider-utils@3.0.0-beta.9
149
+
150
+ ## 1.0.0-beta.11
151
+
152
+ ### Patch Changes
153
+
154
+ - Updated dependencies [dd5fd43]
155
+ - @ai-sdk/provider-utils@3.0.0-beta.8
156
+ - @ai-sdk/openai-compatible@1.0.0-beta.11
157
+
158
+ ## 1.0.0-beta.10
159
+
160
+ ### Patch Changes
161
+
162
+ - Updated dependencies [e7fcc86]
163
+ - @ai-sdk/provider-utils@3.0.0-beta.7
164
+ - @ai-sdk/openai-compatible@1.0.0-beta.10
165
+
166
+ ## 1.0.0-beta.9
167
+
168
+ ### Patch Changes
169
+
170
+ - Updated dependencies [737f1e2]
171
+ - Updated dependencies [ac34802]
172
+ - @ai-sdk/openai-compatible@1.0.0-beta.9
173
+ - @ai-sdk/provider-utils@3.0.0-beta.6
174
+
175
+ ## 1.0.0-beta.8
176
+
177
+ ### Patch Changes
178
+
179
+ - Updated dependencies [57edfcb]
180
+ - Updated dependencies [383cbfa]
181
+ - @ai-sdk/provider-utils@3.0.0-beta.5
182
+ - @ai-sdk/openai-compatible@1.0.0-beta.8
183
+
184
+ ## 1.0.0-beta.7
185
+
186
+ ### Patch Changes
187
+
188
+ - 205077b: fix: improve Zod compatibility
189
+ - Updated dependencies [205077b]
190
+ - @ai-sdk/openai-compatible@1.0.0-beta.7
191
+ - @ai-sdk/provider-utils@3.0.0-beta.4
192
+
193
+ ## 1.0.0-beta.6
194
+
195
+ ### Patch Changes
196
+
197
+ - Updated dependencies [281bb1c]
198
+ - @ai-sdk/openai-compatible@1.0.0-beta.6
199
+
200
+ ## 1.0.0-beta.5
201
+
202
+ ### Patch Changes
203
+
204
+ - Updated dependencies [05d2819]
205
+ - @ai-sdk/provider-utils@3.0.0-beta.3
206
+ - @ai-sdk/openai-compatible@1.0.0-beta.5
207
+
208
+ ## 1.0.0-beta.4
209
+
210
+ ### Patch Changes
211
+
212
+ - Updated dependencies [1b101e1]
213
+ - @ai-sdk/openai-compatible@1.0.0-beta.4
214
+
215
+ ## 1.0.0-beta.3
216
+
217
+ ### Patch Changes
218
+
219
+ - Updated dependencies [7b069ed]
220
+ - @ai-sdk/openai-compatible@1.0.0-beta.3
221
+
222
+ ## 1.0.0-beta.2
223
+
224
+ ### Patch Changes
225
+
226
+ - d1a034f: feature: using Zod 4 for internal stuff
227
+ - Updated dependencies [0571b98]
228
+ - Updated dependencies [39a4fab]
229
+ - Updated dependencies [d1a034f]
230
+ - @ai-sdk/provider-utils@3.0.0-beta.2
231
+ - @ai-sdk/openai-compatible@1.0.0-beta.2
232
+
233
+ ## 1.0.0-beta.1
234
+
235
+ ### Patch Changes
236
+
237
+ - Updated dependencies [742b7be]
238
+ - Updated dependencies [7cddb72]
239
+ - Updated dependencies [ccce59b]
240
+ - Updated dependencies [e2b9e4b]
241
+ - Updated dependencies [45c1ea2]
242
+ - Updated dependencies [e025824]
243
+ - Updated dependencies [0d06df6]
244
+ - Updated dependencies [472524a]
245
+ - Updated dependencies [dd3ff01]
246
+ - Updated dependencies [7435eb5]
247
+ - Updated dependencies [cb68df0]
248
+ - Updated dependencies [bfdca8d]
249
+ - Updated dependencies [44f4aba]
250
+ - Updated dependencies [023ba40]
251
+ - Updated dependencies [5e57fae]
252
+ - Updated dependencies [71f938d]
253
+ - Updated dependencies [28a5ed5]
254
+ - @ai-sdk/provider@2.0.0-beta.1
255
+ - @ai-sdk/provider-utils@3.0.0-beta.1
256
+ - @ai-sdk/openai-compatible@1.0.0-beta.1
257
+
258
+ ## 1.0.0-alpha.15
259
+
260
+ ### Patch Changes
261
+
262
+ - Updated dependencies [48d257a]
263
+ - Updated dependencies [8ba77a7]
264
+ - @ai-sdk/provider@2.0.0-alpha.15
265
+ - @ai-sdk/provider-utils@3.0.0-alpha.15
266
+ - @ai-sdk/openai-compatible@1.0.0-alpha.15
267
+
268
+ ## 1.0.0-alpha.14
269
+
270
+ ### Patch Changes
271
+
272
+ - Updated dependencies [b5da06a]
273
+ - Updated dependencies [63f9e9b]
274
+ - Updated dependencies [2e13791]
275
+ - @ai-sdk/provider@2.0.0-alpha.14
276
+ - @ai-sdk/openai-compatible@1.0.0-alpha.14
277
+ - @ai-sdk/provider-utils@3.0.0-alpha.14
278
+
279
+ ## 1.0.0-alpha.13
280
+
281
+ ### Patch Changes
282
+
283
+ - Updated dependencies [68ecf2f]
284
+ - @ai-sdk/provider@2.0.0-alpha.13
285
+ - @ai-sdk/openai-compatible@1.0.0-alpha.13
286
+ - @ai-sdk/provider-utils@3.0.0-alpha.13
287
+
288
+ ## 1.0.0-alpha.12
289
+
290
+ ### Patch Changes
291
+
292
+ - e2aceaf: feat: add raw chunk support
293
+ - Updated dependencies [e2aceaf]
294
+ - @ai-sdk/openai-compatible@1.0.0-alpha.12
295
+ - @ai-sdk/provider@2.0.0-alpha.12
296
+ - @ai-sdk/provider-utils@3.0.0-alpha.12
297
+
298
+ ## 1.0.0-alpha.11
299
+
300
+ ### Patch Changes
301
+
302
+ - Updated dependencies [c1e6647]
303
+ - @ai-sdk/provider@2.0.0-alpha.11
304
+ - @ai-sdk/openai-compatible@1.0.0-alpha.11
305
+ - @ai-sdk/provider-utils@3.0.0-alpha.11
306
+
307
+ ## 1.0.0-alpha.10
308
+
309
+ ### Patch Changes
310
+
311
+ - Updated dependencies [c4df419]
312
+ - @ai-sdk/provider@2.0.0-alpha.10
313
+ - @ai-sdk/openai-compatible@1.0.0-alpha.10
314
+ - @ai-sdk/provider-utils@3.0.0-alpha.10
315
+
316
+ ## 1.0.0-alpha.9
317
+
318
+ ### Patch Changes
319
+
320
+ - Updated dependencies [811dff3]
321
+ - @ai-sdk/provider@2.0.0-alpha.9
322
+ - @ai-sdk/openai-compatible@1.0.0-alpha.9
323
+ - @ai-sdk/provider-utils@3.0.0-alpha.9
324
+
325
+ ## 1.0.0-alpha.8
326
+
327
+ ### Patch Changes
328
+
329
+ - Updated dependencies [4fef487]
330
+ - Updated dependencies [9222aeb]
331
+ - @ai-sdk/provider-utils@3.0.0-alpha.8
332
+ - @ai-sdk/provider@2.0.0-alpha.8
333
+ - @ai-sdk/openai-compatible@1.0.0-alpha.8
334
+
335
+ ## 1.0.0-alpha.7
336
+
337
+ ### Patch Changes
338
+
339
+ - Updated dependencies [5c56081]
340
+ - @ai-sdk/provider@2.0.0-alpha.7
341
+ - @ai-sdk/openai-compatible@1.0.0-alpha.7
342
+ - @ai-sdk/provider-utils@3.0.0-alpha.7
343
+
344
+ ## 1.0.0-alpha.6
345
+
346
+ ### Patch Changes
347
+
348
+ - Updated dependencies [0d2c085]
349
+ - @ai-sdk/provider@2.0.0-alpha.6
350
+ - @ai-sdk/openai-compatible@1.0.0-alpha.6
351
+ - @ai-sdk/provider-utils@3.0.0-alpha.6
352
+
353
+ ## 1.0.0-alpha.4
354
+
355
+ ### Patch Changes
356
+
357
+ - Updated dependencies [dc714f3]
358
+ - @ai-sdk/provider@2.0.0-alpha.4
359
+ - @ai-sdk/openai-compatible@1.0.0-alpha.4
360
+ - @ai-sdk/provider-utils@3.0.0-alpha.4
361
+
362
+ ## 1.0.0-alpha.3
363
+
364
+ ### Patch Changes
365
+
366
+ - Updated dependencies [6b98118]
367
+ - @ai-sdk/provider@2.0.0-alpha.3
368
+ - @ai-sdk/openai-compatible@1.0.0-alpha.3
369
+ - @ai-sdk/provider-utils@3.0.0-alpha.3
370
+
371
+ ## 1.0.0-alpha.2
372
+
373
+ ### Patch Changes
374
+
375
+ - Updated dependencies [26535e0]
376
+ - @ai-sdk/provider@2.0.0-alpha.2
377
+ - @ai-sdk/openai-compatible@1.0.0-alpha.2
378
+ - @ai-sdk/provider-utils@3.0.0-alpha.2
379
+
380
+ ## 1.0.0-alpha.1
381
+
382
+ ### Patch Changes
383
+
384
+ - Updated dependencies [3f2f00c]
385
+ - @ai-sdk/provider@2.0.0-alpha.1
386
+ - @ai-sdk/openai-compatible@1.0.0-alpha.1
387
+ - @ai-sdk/provider-utils@3.0.0-alpha.1
388
+
389
+ ## 1.0.0-canary.19
390
+
391
+ ### Patch Changes
392
+
393
+ - Updated dependencies [faf8446]
394
+ - @ai-sdk/provider-utils@3.0.0-canary.19
395
+ - @ai-sdk/openai-compatible@1.0.0-canary.19
396
+
397
+ ## 1.0.0-canary.18
398
+
399
+ ### Patch Changes
400
+
401
+ - Updated dependencies [40acf9b]
402
+ - @ai-sdk/provider-utils@3.0.0-canary.18
403
+ - @ai-sdk/openai-compatible@1.0.0-canary.18
404
+
405
+ ## 1.0.0-canary.17
406
+
407
+ ### Patch Changes
408
+
409
+ - Updated dependencies [516be5b]
410
+ - Updated dependencies [ea7a7c9]
411
+ - @ai-sdk/openai-compatible@1.0.0-canary.17
412
+ - @ai-sdk/provider-utils@3.0.0-canary.17
413
+
414
+ ## 1.0.0-canary.16
415
+
416
+ ### Patch Changes
417
+
418
+ - Updated dependencies [87b828f]
419
+ - @ai-sdk/provider-utils@3.0.0-canary.16
420
+ - @ai-sdk/openai-compatible@1.0.0-canary.16
421
+
422
+ ## 1.0.0-canary.15
423
+
424
+ ### Patch Changes
425
+
426
+ - Updated dependencies [a571d6e]
427
+ - Updated dependencies [a8c8bd5]
428
+ - Updated dependencies [7979f7f]
429
+ - Updated dependencies [41fa418]
430
+ - @ai-sdk/provider-utils@3.0.0-canary.15
431
+ - @ai-sdk/provider@2.0.0-canary.14
432
+ - @ai-sdk/openai-compatible@1.0.0-canary.15
433
+
434
+ ## 1.0.0-canary.14
435
+
436
+ ### Patch Changes
437
+
438
+ - Updated dependencies [957b739]
439
+ - Updated dependencies [9bd5ab5]
440
+ - @ai-sdk/provider-utils@3.0.0-canary.14
441
+ - @ai-sdk/provider@2.0.0-canary.13
442
+ - @ai-sdk/openai-compatible@1.0.0-canary.14
443
+
444
+ ## 1.0.0-canary.13
445
+
446
+ ### Patch Changes
447
+
448
+ - Updated dependencies [7b3ae3f]
449
+ - Updated dependencies [d9209ca]
450
+ - Updated dependencies [0ff02bb]
451
+ - @ai-sdk/provider@2.0.0-canary.12
452
+ - @ai-sdk/openai-compatible@1.0.0-canary.13
453
+ - @ai-sdk/provider-utils@3.0.0-canary.13
454
+
455
+ ## 1.0.0-canary.12
456
+
457
+ ### Patch Changes
458
+
459
+ - Updated dependencies [9bf7291]
460
+ - Updated dependencies [4617fab]
461
+ - Updated dependencies [e030615]
462
+ - @ai-sdk/provider@2.0.0-canary.11
463
+ - @ai-sdk/openai-compatible@1.0.0-canary.12
464
+ - @ai-sdk/provider-utils@3.0.0-canary.12
465
+
466
+ ## 1.0.0-canary.11
467
+
468
+ ### Patch Changes
469
+
470
+ - Updated dependencies [db72adc]
471
+ - Updated dependencies [42e32b0]
472
+ - Updated dependencies [66962ed]
473
+ - Updated dependencies [9301f86]
474
+ - Updated dependencies [a3f768e]
475
+ - @ai-sdk/openai-compatible@1.0.0-canary.11
476
+ - @ai-sdk/provider-utils@3.0.0-canary.11
477
+ - @ai-sdk/provider@2.0.0-canary.10
478
+
479
+ ## 1.0.0-canary.10
480
+
481
+ ### Patch Changes
482
+
483
+ - Updated dependencies [cf8280e]
484
+ - Updated dependencies [e86be6f]
485
+ - @ai-sdk/openai-compatible@1.0.0-canary.10
486
+ - @ai-sdk/provider@2.0.0-canary.9
487
+ - @ai-sdk/provider-utils@3.0.0-canary.10
488
+
489
+ ## 1.0.0-canary.9
490
+
491
+ ### Patch Changes
492
+
493
+ - Updated dependencies [95857aa]
494
+ - Updated dependencies [7ea4132]
495
+ - @ai-sdk/provider@2.0.0-canary.8
496
+ - @ai-sdk/openai-compatible@1.0.0-canary.9
497
+ - @ai-sdk/provider-utils@3.0.0-canary.9
498
+
3
499
  ## 1.0.0-canary.8
4
500
 
5
501
  ### Patch Changes
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # AI SDK - DeepSeek Provider
2
2
 
3
- The **[DeepSeek provider](https://sdk.vercel.ai/providers/ai-sdk-providers/deepseek)** for the [AI SDK](https://sdk.vercel.ai/docs) contains language model support for the [DeepSeek](https://www.deepseek.com) platform.
3
+ The **[DeepSeek provider](https://ai-sdk.dev/providers/ai-sdk-providers/deepseek)** for the [AI SDK](https://ai-sdk.dev/docs) contains language model support for the [DeepSeek](https://www.deepseek.com) platform.
4
4
 
5
5
  ## Setup
6
6
 
@@ -32,4 +32,4 @@ const { text } = await generateText({
32
32
 
33
33
  ## Documentation
34
34
 
35
- Please check out the **[DeepSeek provider](https://sdk.vercel.ai/providers/ai-sdk-providers/deepseek)** for more information.
35
+ Please check out the **[DeepSeek provider](https://ai-sdk.dev/providers/ai-sdk-providers/deepseek)** for more information.
package/dist/index.js CHANGED
@@ -32,7 +32,7 @@ var import_provider_utils2 = require("@ai-sdk/provider-utils");
32
32
 
33
33
  // src/deepseek-metadata-extractor.ts
34
34
  var import_provider_utils = require("@ai-sdk/provider-utils");
35
- var import_zod = require("zod");
35
+ var import_v4 = require("zod/v4");
36
36
  var buildDeepseekMetadata = (usage) => {
37
37
  var _a, _b;
38
38
  return usage == null ? void 0 : {
@@ -43,8 +43,8 @@ var buildDeepseekMetadata = (usage) => {
43
43
  };
44
44
  };
45
45
  var deepSeekMetadataExtractor = {
46
- extractMetadata: ({ parsedBody }) => {
47
- const parsed = (0, import_provider_utils.safeValidateTypes)({
46
+ extractMetadata: async ({ parsedBody }) => {
47
+ const parsed = await (0, import_provider_utils.safeValidateTypes)({
48
48
  value: parsedBody,
49
49
  schema: deepSeekResponseSchema
50
50
  });
@@ -53,9 +53,9 @@ var deepSeekMetadataExtractor = {
53
53
  createStreamExtractor: () => {
54
54
  let usage;
55
55
  return {
56
- processChunk: (chunk) => {
56
+ processChunk: async (chunk) => {
57
57
  var _a, _b;
58
- const parsed = (0, import_provider_utils.safeValidateTypes)({
58
+ const parsed = await (0, import_provider_utils.safeValidateTypes)({
59
59
  value: chunk,
60
60
  schema: deepSeekStreamChunkSchema
61
61
  });
@@ -67,17 +67,17 @@ var deepSeekMetadataExtractor = {
67
67
  };
68
68
  }
69
69
  };
70
- var deepSeekUsageSchema = import_zod.z.object({
71
- prompt_cache_hit_tokens: import_zod.z.number().nullish(),
72
- prompt_cache_miss_tokens: import_zod.z.number().nullish()
70
+ var deepSeekUsageSchema = import_v4.z.object({
71
+ prompt_cache_hit_tokens: import_v4.z.number().nullish(),
72
+ prompt_cache_miss_tokens: import_v4.z.number().nullish()
73
73
  });
74
- var deepSeekResponseSchema = import_zod.z.object({
74
+ var deepSeekResponseSchema = import_v4.z.object({
75
75
  usage: deepSeekUsageSchema.nullish()
76
76
  });
77
- var deepSeekStreamChunkSchema = import_zod.z.object({
78
- choices: import_zod.z.array(
79
- import_zod.z.object({
80
- finish_reason: import_zod.z.string().nullish()
77
+ var deepSeekStreamChunkSchema = import_v4.z.object({
78
+ choices: import_v4.z.array(
79
+ import_v4.z.object({
80
+ finish_reason: import_v4.z.string().nullish()
81
81
  })
82
82
  ).nullish(),
83
83
  usage: deepSeekUsageSchema.nullish()
@@ -103,7 +103,6 @@ function createDeepSeek(options = {}) {
103
103
  url: ({ path }) => `${baseURL}${path}`,
104
104
  headers: getHeaders,
105
105
  fetch: options.fetch,
106
- defaultObjectGenerationMode: "json",
107
106
  metadataExtractor: deepSeekMetadataExtractor
108
107
  });
109
108
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/deepseek-provider.ts","../src/deepseek-metadata-extractor.ts"],"sourcesContent":["export { createDeepSeek, deepseek } from './deepseek-provider';\nexport type {\n DeepSeekProvider,\n DeepSeekProviderSettings,\n} from './deepseek-provider';\nexport type { OpenAICompatibleErrorData as DeepSeekErrorData } from '@ai-sdk/openai-compatible';\n","import { OpenAICompatibleChatLanguageModel } from '@ai-sdk/openai-compatible';\nimport {\n LanguageModelV2,\n NoSuchModelError,\n ProviderV2,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { DeepSeekChatModelId } from './deepseek-chat-settings';\nimport { deepSeekMetadataExtractor } from './deepseek-metadata-extractor';\n\nexport interface DeepSeekProviderSettings {\n /**\nDeepSeek API key.\n*/\n apiKey?: string;\n /**\nBase URL for the API calls.\n*/\n baseURL?: string;\n /**\nCustom headers to include in the requests.\n*/\n headers?: Record<string, string>;\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n*/\n fetch?: FetchFunction;\n}\n\nexport interface DeepSeekProvider extends ProviderV2 {\n /**\nCreates a DeepSeek model for text generation.\n*/\n (modelId: DeepSeekChatModelId): LanguageModelV2;\n\n /**\nCreates a DeepSeek model for text generation.\n*/\n languageModel(modelId: DeepSeekChatModelId): LanguageModelV2;\n\n /**\nCreates a DeepSeek chat model for text generation.\n*/\n chat(modelId: DeepSeekChatModelId): LanguageModelV2;\n}\n\nexport function createDeepSeek(\n options: DeepSeekProviderSettings = {},\n): DeepSeekProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.deepseek.com/v1',\n );\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'DEEPSEEK_API_KEY',\n description: 'DeepSeek API key',\n })}`,\n ...options.headers,\n });\n\n const createLanguageModel = (modelId: DeepSeekChatModelId) => {\n return new OpenAICompatibleChatLanguageModel(modelId, {\n provider: `deepseek.chat`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n defaultObjectGenerationMode: 'json',\n metadataExtractor: deepSeekMetadataExtractor,\n });\n };\n\n const provider = (modelId: DeepSeekChatModelId) =>\n createLanguageModel(modelId);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const deepseek = createDeepSeek();\n","import { MetadataExtractor } from '@ai-sdk/openai-compatible';\nimport { safeValidateTypes } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nconst buildDeepseekMetadata = (\n usage: z.infer<typeof deepSeekUsageSchema> | undefined,\n) => {\n return usage == null\n ? undefined\n : {\n deepseek: {\n promptCacheHitTokens: usage.prompt_cache_hit_tokens ?? NaN,\n promptCacheMissTokens: usage.prompt_cache_miss_tokens ?? NaN,\n },\n };\n};\n\nexport const deepSeekMetadataExtractor: MetadataExtractor = {\n extractMetadata: ({ parsedBody }: { parsedBody: unknown }) => {\n const parsed = safeValidateTypes({\n value: parsedBody,\n schema: deepSeekResponseSchema,\n });\n\n return !parsed.success || parsed.value.usage == null\n ? undefined\n : buildDeepseekMetadata(parsed.value.usage);\n },\n\n createStreamExtractor: () => {\n let usage: z.infer<typeof deepSeekUsageSchema> | undefined;\n\n return {\n processChunk: (chunk: unknown) => {\n const parsed = safeValidateTypes({\n value: chunk,\n schema: deepSeekStreamChunkSchema,\n });\n\n if (\n parsed.success &&\n parsed.value.choices?.[0]?.finish_reason === 'stop' &&\n parsed.value.usage\n ) {\n usage = parsed.value.usage;\n }\n },\n buildMetadata: () => buildDeepseekMetadata(usage),\n };\n },\n};\n\nconst deepSeekUsageSchema = z.object({\n prompt_cache_hit_tokens: z.number().nullish(),\n prompt_cache_miss_tokens: z.number().nullish(),\n});\n\nconst deepSeekResponseSchema = z.object({\n usage: deepSeekUsageSchema.nullish(),\n});\n\nconst deepSeekStreamChunkSchema = z.object({\n choices: z\n .array(\n z.object({\n finish_reason: z.string().nullish(),\n }),\n )\n .nullish(),\n usage: deepSeekUsageSchema.nullish(),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,+BAAkD;AAClD,sBAIO;AACP,IAAAA,yBAIO;;;ACTP,4BAAkC;AAClC,iBAAkB;AAElB,IAAM,wBAAwB,CAC5B,UACG;AANL;AAOE,SAAO,SAAS,OACZ,SACA;AAAA,IACE,UAAU;AAAA,MACR,uBAAsB,WAAM,4BAAN,YAAiC;AAAA,MACvD,wBAAuB,WAAM,6BAAN,YAAkC;AAAA,IAC3D;AAAA,EACF;AACN;AAEO,IAAM,4BAA+C;AAAA,EAC1D,iBAAiB,CAAC,EAAE,WAAW,MAA+B;AAC5D,UAAM,aAAS,yCAAkB;AAAA,MAC/B,OAAO;AAAA,MACP,QAAQ;AAAA,IACV,CAAC;AAED,WAAO,CAAC,OAAO,WAAW,OAAO,MAAM,SAAS,OAC5C,SACA,sBAAsB,OAAO,MAAM,KAAK;AAAA,EAC9C;AAAA,EAEA,uBAAuB,MAAM;AAC3B,QAAI;AAEJ,WAAO;AAAA,MACL,cAAc,CAAC,UAAmB;AAjCxC;AAkCQ,cAAM,aAAS,yCAAkB;AAAA,UAC/B,OAAO;AAAA,UACP,QAAQ;AAAA,QACV,CAAC;AAED,YACE,OAAO,aACP,kBAAO,MAAM,YAAb,mBAAuB,OAAvB,mBAA2B,mBAAkB,UAC7C,OAAO,MAAM,OACb;AACA,kBAAQ,OAAO,MAAM;AAAA,QACvB;AAAA,MACF;AAAA,MACA,eAAe,MAAM,sBAAsB,KAAK;AAAA,IAClD;AAAA,EACF;AACF;AAEA,IAAM,sBAAsB,aAAE,OAAO;AAAA,EACnC,yBAAyB,aAAE,OAAO,EAAE,QAAQ;AAAA,EAC5C,0BAA0B,aAAE,OAAO,EAAE,QAAQ;AAC/C,CAAC;AAED,IAAM,yBAAyB,aAAE,OAAO;AAAA,EACtC,OAAO,oBAAoB,QAAQ;AACrC,CAAC;AAED,IAAM,4BAA4B,aAAE,OAAO;AAAA,EACzC,SAAS,aACN;AAAA,IACC,aAAE,OAAO;AAAA,MACP,eAAe,aAAE,OAAO,EAAE,QAAQ;AAAA,IACpC,CAAC;AAAA,EACH,EACC,QAAQ;AAAA,EACX,OAAO,oBAAoB,QAAQ;AACrC,CAAC;;;ADnBM,SAAS,eACd,UAAoC,CAAC,GACnB;AArDpB;AAsDE,QAAM,cAAU;AAAA,KACd,aAAQ,YAAR,YAAmB;AAAA,EACrB;AACA,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,cAAU,mCAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,GAAG,QAAQ;AAAA,EACb;AAEA,QAAM,sBAAsB,CAAC,YAAiC;AAC5D,WAAO,IAAI,2DAAkC,SAAS;AAAA,MACpD,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,6BAA6B;AAAA,MAC7B,mBAAmB;AAAA,IACrB,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,YAChB,oBAAoB,OAAO;AAE7B,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAEhB,WAAS,qBAAqB,CAAC,YAAoB;AACjD,UAAM,IAAI,iCAAiB,EAAE,SAAS,WAAW,qBAAqB,CAAC;AAAA,EACzE;AACA,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,iCAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAEO,IAAM,WAAW,eAAe;","names":["import_provider_utils"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/deepseek-provider.ts","../src/deepseek-metadata-extractor.ts"],"sourcesContent":["export { createDeepSeek, deepseek } from './deepseek-provider';\nexport type {\n DeepSeekProvider,\n DeepSeekProviderSettings,\n} from './deepseek-provider';\nexport type { OpenAICompatibleErrorData as DeepSeekErrorData } from '@ai-sdk/openai-compatible';\n","import { OpenAICompatibleChatLanguageModel } from '@ai-sdk/openai-compatible';\nimport {\n LanguageModelV2,\n NoSuchModelError,\n ProviderV2,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { DeepSeekChatModelId } from './deepseek-chat-options';\nimport { deepSeekMetadataExtractor } from './deepseek-metadata-extractor';\n\nexport interface DeepSeekProviderSettings {\n /**\nDeepSeek API key.\n*/\n apiKey?: string;\n /**\nBase URL for the API calls.\n*/\n baseURL?: string;\n /**\nCustom headers to include in the requests.\n*/\n headers?: Record<string, string>;\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n*/\n fetch?: FetchFunction;\n}\n\nexport interface DeepSeekProvider extends ProviderV2 {\n /**\nCreates a DeepSeek model for text generation.\n*/\n (modelId: DeepSeekChatModelId): LanguageModelV2;\n\n /**\nCreates a DeepSeek model for text generation.\n*/\n languageModel(modelId: DeepSeekChatModelId): LanguageModelV2;\n\n /**\nCreates a DeepSeek chat model for text generation.\n*/\n chat(modelId: DeepSeekChatModelId): LanguageModelV2;\n}\n\nexport function createDeepSeek(\n options: DeepSeekProviderSettings = {},\n): DeepSeekProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.deepseek.com/v1',\n );\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'DEEPSEEK_API_KEY',\n description: 'DeepSeek API key',\n })}`,\n ...options.headers,\n });\n\n const createLanguageModel = (modelId: DeepSeekChatModelId) => {\n return new OpenAICompatibleChatLanguageModel(modelId, {\n provider: `deepseek.chat`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n metadataExtractor: deepSeekMetadataExtractor,\n });\n };\n\n const provider = (modelId: DeepSeekChatModelId) =>\n createLanguageModel(modelId);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const deepseek = createDeepSeek();\n","import { MetadataExtractor } from '@ai-sdk/openai-compatible';\nimport { safeValidateTypes } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst buildDeepseekMetadata = (\n usage: z.infer<typeof deepSeekUsageSchema> | undefined,\n) => {\n return usage == null\n ? undefined\n : {\n deepseek: {\n promptCacheHitTokens: usage.prompt_cache_hit_tokens ?? NaN,\n promptCacheMissTokens: usage.prompt_cache_miss_tokens ?? NaN,\n },\n };\n};\n\nexport const deepSeekMetadataExtractor: MetadataExtractor = {\n extractMetadata: async ({ parsedBody }: { parsedBody: unknown }) => {\n const parsed = await safeValidateTypes({\n value: parsedBody,\n schema: deepSeekResponseSchema,\n });\n\n return !parsed.success || parsed.value.usage == null\n ? undefined\n : buildDeepseekMetadata(parsed.value.usage);\n },\n\n createStreamExtractor: () => {\n let usage: z.infer<typeof deepSeekUsageSchema> | undefined;\n\n return {\n processChunk: async (chunk: unknown) => {\n const parsed = await safeValidateTypes({\n value: chunk,\n schema: deepSeekStreamChunkSchema,\n });\n\n if (\n parsed.success &&\n parsed.value.choices?.[0]?.finish_reason === 'stop' &&\n parsed.value.usage\n ) {\n usage = parsed.value.usage;\n }\n },\n buildMetadata: () => buildDeepseekMetadata(usage),\n };\n },\n};\n\nconst deepSeekUsageSchema = z.object({\n prompt_cache_hit_tokens: z.number().nullish(),\n prompt_cache_miss_tokens: z.number().nullish(),\n});\n\nconst deepSeekResponseSchema = z.object({\n usage: deepSeekUsageSchema.nullish(),\n});\n\nconst deepSeekStreamChunkSchema = z.object({\n choices: z\n .array(\n z.object({\n finish_reason: z.string().nullish(),\n }),\n )\n .nullish(),\n usage: deepSeekUsageSchema.nullish(),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,+BAAkD;AAClD,sBAIO;AACP,IAAAA,yBAIO;;;ACTP,4BAAkC;AAClC,gBAAkB;AAElB,IAAM,wBAAwB,CAC5B,UACG;AANL;AAOE,SAAO,SAAS,OACZ,SACA;AAAA,IACE,UAAU;AAAA,MACR,uBAAsB,WAAM,4BAAN,YAAiC;AAAA,MACvD,wBAAuB,WAAM,6BAAN,YAAkC;AAAA,IAC3D;AAAA,EACF;AACN;AAEO,IAAM,4BAA+C;AAAA,EAC1D,iBAAiB,OAAO,EAAE,WAAW,MAA+B;AAClE,UAAM,SAAS,UAAM,yCAAkB;AAAA,MACrC,OAAO;AAAA,MACP,QAAQ;AAAA,IACV,CAAC;AAED,WAAO,CAAC,OAAO,WAAW,OAAO,MAAM,SAAS,OAC5C,SACA,sBAAsB,OAAO,MAAM,KAAK;AAAA,EAC9C;AAAA,EAEA,uBAAuB,MAAM;AAC3B,QAAI;AAEJ,WAAO;AAAA,MACL,cAAc,OAAO,UAAmB;AAjC9C;AAkCQ,cAAM,SAAS,UAAM,yCAAkB;AAAA,UACrC,OAAO;AAAA,UACP,QAAQ;AAAA,QACV,CAAC;AAED,YACE,OAAO,aACP,kBAAO,MAAM,YAAb,mBAAuB,OAAvB,mBAA2B,mBAAkB,UAC7C,OAAO,MAAM,OACb;AACA,kBAAQ,OAAO,MAAM;AAAA,QACvB;AAAA,MACF;AAAA,MACA,eAAe,MAAM,sBAAsB,KAAK;AAAA,IAClD;AAAA,EACF;AACF;AAEA,IAAM,sBAAsB,YAAE,OAAO;AAAA,EACnC,yBAAyB,YAAE,OAAO,EAAE,QAAQ;AAAA,EAC5C,0BAA0B,YAAE,OAAO,EAAE,QAAQ;AAC/C,CAAC;AAED,IAAM,yBAAyB,YAAE,OAAO;AAAA,EACtC,OAAO,oBAAoB,QAAQ;AACrC,CAAC;AAED,IAAM,4BAA4B,YAAE,OAAO;AAAA,EACzC,SAAS,YACN;AAAA,IACC,YAAE,OAAO;AAAA,MACP,eAAe,YAAE,OAAO,EAAE,QAAQ;AAAA,IACpC,CAAC;AAAA,EACH,EACC,QAAQ;AAAA,EACX,OAAO,oBAAoB,QAAQ;AACrC,CAAC;;;ADnBM,SAAS,eACd,UAAoC,CAAC,GACnB;AArDpB;AAsDE,QAAM,cAAU;AAAA,KACd,aAAQ,YAAR,YAAmB;AAAA,EACrB;AACA,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,cAAU,mCAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,GAAG,QAAQ;AAAA,EACb;AAEA,QAAM,sBAAsB,CAAC,YAAiC;AAC5D,WAAO,IAAI,2DAAkC,SAAS;AAAA,MACpD,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,mBAAmB;AAAA,IACrB,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,YAChB,oBAAoB,OAAO;AAE7B,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAEhB,WAAS,qBAAqB,CAAC,YAAoB;AACjD,UAAM,IAAI,iCAAiB,EAAE,SAAS,WAAW,qBAAqB,CAAC;AAAA,EACzE;AACA,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,iCAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAEO,IAAM,WAAW,eAAe;","names":["import_provider_utils"]}
package/dist/index.mjs CHANGED
@@ -10,7 +10,7 @@ import {
10
10
 
11
11
  // src/deepseek-metadata-extractor.ts
12
12
  import { safeValidateTypes } from "@ai-sdk/provider-utils";
13
- import { z } from "zod";
13
+ import { z } from "zod/v4";
14
14
  var buildDeepseekMetadata = (usage) => {
15
15
  var _a, _b;
16
16
  return usage == null ? void 0 : {
@@ -21,8 +21,8 @@ var buildDeepseekMetadata = (usage) => {
21
21
  };
22
22
  };
23
23
  var deepSeekMetadataExtractor = {
24
- extractMetadata: ({ parsedBody }) => {
25
- const parsed = safeValidateTypes({
24
+ extractMetadata: async ({ parsedBody }) => {
25
+ const parsed = await safeValidateTypes({
26
26
  value: parsedBody,
27
27
  schema: deepSeekResponseSchema
28
28
  });
@@ -31,9 +31,9 @@ var deepSeekMetadataExtractor = {
31
31
  createStreamExtractor: () => {
32
32
  let usage;
33
33
  return {
34
- processChunk: (chunk) => {
34
+ processChunk: async (chunk) => {
35
35
  var _a, _b;
36
- const parsed = safeValidateTypes({
36
+ const parsed = await safeValidateTypes({
37
37
  value: chunk,
38
38
  schema: deepSeekStreamChunkSchema
39
39
  });
@@ -81,7 +81,6 @@ function createDeepSeek(options = {}) {
81
81
  url: ({ path }) => `${baseURL}${path}`,
82
82
  headers: getHeaders,
83
83
  fetch: options.fetch,
84
- defaultObjectGenerationMode: "json",
85
84
  metadataExtractor: deepSeekMetadataExtractor
86
85
  });
87
86
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/deepseek-provider.ts","../src/deepseek-metadata-extractor.ts"],"sourcesContent":["import { OpenAICompatibleChatLanguageModel } from '@ai-sdk/openai-compatible';\nimport {\n LanguageModelV2,\n NoSuchModelError,\n ProviderV2,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { DeepSeekChatModelId } from './deepseek-chat-settings';\nimport { deepSeekMetadataExtractor } from './deepseek-metadata-extractor';\n\nexport interface DeepSeekProviderSettings {\n /**\nDeepSeek API key.\n*/\n apiKey?: string;\n /**\nBase URL for the API calls.\n*/\n baseURL?: string;\n /**\nCustom headers to include in the requests.\n*/\n headers?: Record<string, string>;\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n*/\n fetch?: FetchFunction;\n}\n\nexport interface DeepSeekProvider extends ProviderV2 {\n /**\nCreates a DeepSeek model for text generation.\n*/\n (modelId: DeepSeekChatModelId): LanguageModelV2;\n\n /**\nCreates a DeepSeek model for text generation.\n*/\n languageModel(modelId: DeepSeekChatModelId): LanguageModelV2;\n\n /**\nCreates a DeepSeek chat model for text generation.\n*/\n chat(modelId: DeepSeekChatModelId): LanguageModelV2;\n}\n\nexport function createDeepSeek(\n options: DeepSeekProviderSettings = {},\n): DeepSeekProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.deepseek.com/v1',\n );\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'DEEPSEEK_API_KEY',\n description: 'DeepSeek API key',\n })}`,\n ...options.headers,\n });\n\n const createLanguageModel = (modelId: DeepSeekChatModelId) => {\n return new OpenAICompatibleChatLanguageModel(modelId, {\n provider: `deepseek.chat`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n defaultObjectGenerationMode: 'json',\n metadataExtractor: deepSeekMetadataExtractor,\n });\n };\n\n const provider = (modelId: DeepSeekChatModelId) =>\n createLanguageModel(modelId);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const deepseek = createDeepSeek();\n","import { MetadataExtractor } from '@ai-sdk/openai-compatible';\nimport { safeValidateTypes } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nconst buildDeepseekMetadata = (\n usage: z.infer<typeof deepSeekUsageSchema> | undefined,\n) => {\n return usage == null\n ? undefined\n : {\n deepseek: {\n promptCacheHitTokens: usage.prompt_cache_hit_tokens ?? NaN,\n promptCacheMissTokens: usage.prompt_cache_miss_tokens ?? NaN,\n },\n };\n};\n\nexport const deepSeekMetadataExtractor: MetadataExtractor = {\n extractMetadata: ({ parsedBody }: { parsedBody: unknown }) => {\n const parsed = safeValidateTypes({\n value: parsedBody,\n schema: deepSeekResponseSchema,\n });\n\n return !parsed.success || parsed.value.usage == null\n ? undefined\n : buildDeepseekMetadata(parsed.value.usage);\n },\n\n createStreamExtractor: () => {\n let usage: z.infer<typeof deepSeekUsageSchema> | undefined;\n\n return {\n processChunk: (chunk: unknown) => {\n const parsed = safeValidateTypes({\n value: chunk,\n schema: deepSeekStreamChunkSchema,\n });\n\n if (\n parsed.success &&\n parsed.value.choices?.[0]?.finish_reason === 'stop' &&\n parsed.value.usage\n ) {\n usage = parsed.value.usage;\n }\n },\n buildMetadata: () => buildDeepseekMetadata(usage),\n };\n },\n};\n\nconst deepSeekUsageSchema = z.object({\n prompt_cache_hit_tokens: z.number().nullish(),\n prompt_cache_miss_tokens: z.number().nullish(),\n});\n\nconst deepSeekResponseSchema = z.object({\n usage: deepSeekUsageSchema.nullish(),\n});\n\nconst deepSeekStreamChunkSchema = z.object({\n choices: z\n .array(\n z.object({\n finish_reason: z.string().nullish(),\n }),\n )\n .nullish(),\n usage: deepSeekUsageSchema.nullish(),\n});\n"],"mappings":";AAAA,SAAS,yCAAyC;AAClD;AAAA,EAEE;AAAA,OAEK;AACP;AAAA,EAEE;AAAA,EACA;AAAA,OACK;;;ACTP,SAAS,yBAAyB;AAClC,SAAS,SAAS;AAElB,IAAM,wBAAwB,CAC5B,UACG;AANL;AAOE,SAAO,SAAS,OACZ,SACA;AAAA,IACE,UAAU;AAAA,MACR,uBAAsB,WAAM,4BAAN,YAAiC;AAAA,MACvD,wBAAuB,WAAM,6BAAN,YAAkC;AAAA,IAC3D;AAAA,EACF;AACN;AAEO,IAAM,4BAA+C;AAAA,EAC1D,iBAAiB,CAAC,EAAE,WAAW,MAA+B;AAC5D,UAAM,SAAS,kBAAkB;AAAA,MAC/B,OAAO;AAAA,MACP,QAAQ;AAAA,IACV,CAAC;AAED,WAAO,CAAC,OAAO,WAAW,OAAO,MAAM,SAAS,OAC5C,SACA,sBAAsB,OAAO,MAAM,KAAK;AAAA,EAC9C;AAAA,EAEA,uBAAuB,MAAM;AAC3B,QAAI;AAEJ,WAAO;AAAA,MACL,cAAc,CAAC,UAAmB;AAjCxC;AAkCQ,cAAM,SAAS,kBAAkB;AAAA,UAC/B,OAAO;AAAA,UACP,QAAQ;AAAA,QACV,CAAC;AAED,YACE,OAAO,aACP,kBAAO,MAAM,YAAb,mBAAuB,OAAvB,mBAA2B,mBAAkB,UAC7C,OAAO,MAAM,OACb;AACA,kBAAQ,OAAO,MAAM;AAAA,QACvB;AAAA,MACF;AAAA,MACA,eAAe,MAAM,sBAAsB,KAAK;AAAA,IAClD;AAAA,EACF;AACF;AAEA,IAAM,sBAAsB,EAAE,OAAO;AAAA,EACnC,yBAAyB,EAAE,OAAO,EAAE,QAAQ;AAAA,EAC5C,0BAA0B,EAAE,OAAO,EAAE,QAAQ;AAC/C,CAAC;AAED,IAAM,yBAAyB,EAAE,OAAO;AAAA,EACtC,OAAO,oBAAoB,QAAQ;AACrC,CAAC;AAED,IAAM,4BAA4B,EAAE,OAAO;AAAA,EACzC,SAAS,EACN;AAAA,IACC,EAAE,OAAO;AAAA,MACP,eAAe,EAAE,OAAO,EAAE,QAAQ;AAAA,IACpC,CAAC;AAAA,EACH,EACC,QAAQ;AAAA,EACX,OAAO,oBAAoB,QAAQ;AACrC,CAAC;;;ADnBM,SAAS,eACd,UAAoC,CAAC,GACnB;AArDpB;AAsDE,QAAM,UAAU;AAAA,KACd,aAAQ,YAAR,YAAmB;AAAA,EACrB;AACA,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,UAAU,WAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,GAAG,QAAQ;AAAA,EACb;AAEA,QAAM,sBAAsB,CAAC,YAAiC;AAC5D,WAAO,IAAI,kCAAkC,SAAS;AAAA,MACpD,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,6BAA6B;AAAA,MAC7B,mBAAmB;AAAA,IACrB,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,YAChB,oBAAoB,OAAO;AAE7B,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAEhB,WAAS,qBAAqB,CAAC,YAAoB;AACjD,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,qBAAqB,CAAC;AAAA,EACzE;AACA,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAEO,IAAM,WAAW,eAAe;","names":[]}
1
+ {"version":3,"sources":["../src/deepseek-provider.ts","../src/deepseek-metadata-extractor.ts"],"sourcesContent":["import { OpenAICompatibleChatLanguageModel } from '@ai-sdk/openai-compatible';\nimport {\n LanguageModelV2,\n NoSuchModelError,\n ProviderV2,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { DeepSeekChatModelId } from './deepseek-chat-options';\nimport { deepSeekMetadataExtractor } from './deepseek-metadata-extractor';\n\nexport interface DeepSeekProviderSettings {\n /**\nDeepSeek API key.\n*/\n apiKey?: string;\n /**\nBase URL for the API calls.\n*/\n baseURL?: string;\n /**\nCustom headers to include in the requests.\n*/\n headers?: Record<string, string>;\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n*/\n fetch?: FetchFunction;\n}\n\nexport interface DeepSeekProvider extends ProviderV2 {\n /**\nCreates a DeepSeek model for text generation.\n*/\n (modelId: DeepSeekChatModelId): LanguageModelV2;\n\n /**\nCreates a DeepSeek model for text generation.\n*/\n languageModel(modelId: DeepSeekChatModelId): LanguageModelV2;\n\n /**\nCreates a DeepSeek chat model for text generation.\n*/\n chat(modelId: DeepSeekChatModelId): LanguageModelV2;\n}\n\nexport function createDeepSeek(\n options: DeepSeekProviderSettings = {},\n): DeepSeekProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.deepseek.com/v1',\n );\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'DEEPSEEK_API_KEY',\n description: 'DeepSeek API key',\n })}`,\n ...options.headers,\n });\n\n const createLanguageModel = (modelId: DeepSeekChatModelId) => {\n return new OpenAICompatibleChatLanguageModel(modelId, {\n provider: `deepseek.chat`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n metadataExtractor: deepSeekMetadataExtractor,\n });\n };\n\n const provider = (modelId: DeepSeekChatModelId) =>\n createLanguageModel(modelId);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const deepseek = createDeepSeek();\n","import { MetadataExtractor } from '@ai-sdk/openai-compatible';\nimport { safeValidateTypes } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst buildDeepseekMetadata = (\n usage: z.infer<typeof deepSeekUsageSchema> | undefined,\n) => {\n return usage == null\n ? undefined\n : {\n deepseek: {\n promptCacheHitTokens: usage.prompt_cache_hit_tokens ?? NaN,\n promptCacheMissTokens: usage.prompt_cache_miss_tokens ?? NaN,\n },\n };\n};\n\nexport const deepSeekMetadataExtractor: MetadataExtractor = {\n extractMetadata: async ({ parsedBody }: { parsedBody: unknown }) => {\n const parsed = await safeValidateTypes({\n value: parsedBody,\n schema: deepSeekResponseSchema,\n });\n\n return !parsed.success || parsed.value.usage == null\n ? undefined\n : buildDeepseekMetadata(parsed.value.usage);\n },\n\n createStreamExtractor: () => {\n let usage: z.infer<typeof deepSeekUsageSchema> | undefined;\n\n return {\n processChunk: async (chunk: unknown) => {\n const parsed = await safeValidateTypes({\n value: chunk,\n schema: deepSeekStreamChunkSchema,\n });\n\n if (\n parsed.success &&\n parsed.value.choices?.[0]?.finish_reason === 'stop' &&\n parsed.value.usage\n ) {\n usage = parsed.value.usage;\n }\n },\n buildMetadata: () => buildDeepseekMetadata(usage),\n };\n },\n};\n\nconst deepSeekUsageSchema = z.object({\n prompt_cache_hit_tokens: z.number().nullish(),\n prompt_cache_miss_tokens: z.number().nullish(),\n});\n\nconst deepSeekResponseSchema = z.object({\n usage: deepSeekUsageSchema.nullish(),\n});\n\nconst deepSeekStreamChunkSchema = z.object({\n choices: z\n .array(\n z.object({\n finish_reason: z.string().nullish(),\n }),\n )\n .nullish(),\n usage: deepSeekUsageSchema.nullish(),\n});\n"],"mappings":";AAAA,SAAS,yCAAyC;AAClD;AAAA,EAEE;AAAA,OAEK;AACP;AAAA,EAEE;AAAA,EACA;AAAA,OACK;;;ACTP,SAAS,yBAAyB;AAClC,SAAS,SAAS;AAElB,IAAM,wBAAwB,CAC5B,UACG;AANL;AAOE,SAAO,SAAS,OACZ,SACA;AAAA,IACE,UAAU;AAAA,MACR,uBAAsB,WAAM,4BAAN,YAAiC;AAAA,MACvD,wBAAuB,WAAM,6BAAN,YAAkC;AAAA,IAC3D;AAAA,EACF;AACN;AAEO,IAAM,4BAA+C;AAAA,EAC1D,iBAAiB,OAAO,EAAE,WAAW,MAA+B;AAClE,UAAM,SAAS,MAAM,kBAAkB;AAAA,MACrC,OAAO;AAAA,MACP,QAAQ;AAAA,IACV,CAAC;AAED,WAAO,CAAC,OAAO,WAAW,OAAO,MAAM,SAAS,OAC5C,SACA,sBAAsB,OAAO,MAAM,KAAK;AAAA,EAC9C;AAAA,EAEA,uBAAuB,MAAM;AAC3B,QAAI;AAEJ,WAAO;AAAA,MACL,cAAc,OAAO,UAAmB;AAjC9C;AAkCQ,cAAM,SAAS,MAAM,kBAAkB;AAAA,UACrC,OAAO;AAAA,UACP,QAAQ;AAAA,QACV,CAAC;AAED,YACE,OAAO,aACP,kBAAO,MAAM,YAAb,mBAAuB,OAAvB,mBAA2B,mBAAkB,UAC7C,OAAO,MAAM,OACb;AACA,kBAAQ,OAAO,MAAM;AAAA,QACvB;AAAA,MACF;AAAA,MACA,eAAe,MAAM,sBAAsB,KAAK;AAAA,IAClD;AAAA,EACF;AACF;AAEA,IAAM,sBAAsB,EAAE,OAAO;AAAA,EACnC,yBAAyB,EAAE,OAAO,EAAE,QAAQ;AAAA,EAC5C,0BAA0B,EAAE,OAAO,EAAE,QAAQ;AAC/C,CAAC;AAED,IAAM,yBAAyB,EAAE,OAAO;AAAA,EACtC,OAAO,oBAAoB,QAAQ;AACrC,CAAC;AAED,IAAM,4BAA4B,EAAE,OAAO;AAAA,EACzC,SAAS,EACN;AAAA,IACC,EAAE,OAAO;AAAA,MACP,eAAe,EAAE,OAAO,EAAE,QAAQ;AAAA,IACpC,CAAC;AAAA,EACH,EACC,QAAQ;AAAA,EACX,OAAO,oBAAoB,QAAQ;AACrC,CAAC;;;ADnBM,SAAS,eACd,UAAoC,CAAC,GACnB;AArDpB;AAsDE,QAAM,UAAU;AAAA,KACd,aAAQ,YAAR,YAAmB;AAAA,EACrB;AACA,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,UAAU,WAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,GAAG,QAAQ;AAAA,EACb;AAEA,QAAM,sBAAsB,CAAC,YAAiC;AAC5D,WAAO,IAAI,kCAAkC,SAAS;AAAA,MACpD,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,mBAAmB;AAAA,IACrB,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,YAChB,oBAAoB,OAAO;AAE7B,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAEhB,WAAS,qBAAqB,CAAC,YAAoB;AACjD,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,qBAAqB,CAAC;AAAA,EACzE;AACA,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAEO,IAAM,WAAW,eAAe;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/deepseek",
3
- "version": "1.0.0-canary.8",
3
+ "version": "1.0.0",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -19,19 +19,19 @@
19
19
  }
20
20
  },
21
21
  "dependencies": {
22
- "@ai-sdk/openai-compatible": "1.0.0-canary.8",
23
- "@ai-sdk/provider": "2.0.0-canary.7",
24
- "@ai-sdk/provider-utils": "3.0.0-canary.8"
22
+ "@ai-sdk/openai-compatible": "1.0.0",
23
+ "@ai-sdk/provider": "2.0.0",
24
+ "@ai-sdk/provider-utils": "3.0.0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "20.17.24",
28
28
  "tsup": "^8",
29
29
  "typescript": "5.8.3",
30
- "zod": "3.23.8",
30
+ "zod": "3.25.76",
31
31
  "@vercel/ai-tsconfig": "0.0.0"
32
32
  },
33
33
  "peerDependencies": {
34
- "zod": "^3.0.0"
34
+ "zod": "^3.25.76 || ^4"
35
35
  },
36
36
  "engines": {
37
37
  "node": ">=18"
@@ -39,7 +39,7 @@
39
39
  "publishConfig": {
40
40
  "access": "public"
41
41
  },
42
- "homepage": "https://sdk.vercel.ai/docs",
42
+ "homepage": "https://ai-sdk.dev/docs",
43
43
  "repository": {
44
44
  "type": "git",
45
45
  "url": "git+https://github.com/vercel/ai.git"
@@ -58,6 +58,8 @@
58
58
  "type-check": "tsc --build",
59
59
  "prettier-check": "prettier --check \"./**/*.ts*\"",
60
60
  "test": "pnpm test:node && pnpm test:edge",
61
+ "test:update": "pnpm test:node -u",
62
+ "test:watch": "vitest --config vitest.node.config.js",
61
63
  "test:edge": "vitest --config vitest.edge.config.js --run",
62
64
  "test:node": "vitest --config vitest.node.config.js --run"
63
65
  }