@ai-sdk/deepseek 0.2.14 → 1.0.0-alpha.10

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,75 +1,309 @@
1
1
  # @ai-sdk/deepseek
2
2
 
3
- ## 0.2.14
3
+ ## 1.0.0-alpha.10
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - Updated dependencies [d87b9d1]
8
- - @ai-sdk/provider-utils@2.2.8
9
- - @ai-sdk/openai-compatible@0.2.14
7
+ - Updated dependencies [c4df419]
8
+ - @ai-sdk/provider@2.0.0-alpha.10
9
+ - @ai-sdk/openai-compatible@1.0.0-alpha.10
10
+ - @ai-sdk/provider-utils@3.0.0-alpha.10
10
11
 
11
- ## 0.2.13
12
+ ## 1.0.0-alpha.9
12
13
 
13
14
  ### Patch Changes
14
15
 
15
- - Updated dependencies [23571c9]
16
- - @ai-sdk/openai-compatible@0.2.13
16
+ - Updated dependencies [811dff3]
17
+ - @ai-sdk/provider@2.0.0-alpha.9
18
+ - @ai-sdk/openai-compatible@1.0.0-alpha.9
19
+ - @ai-sdk/provider-utils@3.0.0-alpha.9
17
20
 
18
- ## 0.2.12
21
+ ## 1.0.0-alpha.8
19
22
 
20
23
  ### Patch Changes
21
24
 
22
- - Updated dependencies [13492fe]
23
- - @ai-sdk/openai-compatible@0.2.12
25
+ - Updated dependencies [4fef487]
26
+ - Updated dependencies [9222aeb]
27
+ - @ai-sdk/provider-utils@3.0.0-alpha.8
28
+ - @ai-sdk/provider@2.0.0-alpha.8
29
+ - @ai-sdk/openai-compatible@1.0.0-alpha.8
24
30
 
25
- ## 0.2.11
31
+ ## 1.0.0-alpha.7
26
32
 
27
33
  ### Patch Changes
28
34
 
29
- - Updated dependencies [b5c9cd4]
30
- - @ai-sdk/openai-compatible@0.2.11
35
+ - Updated dependencies [5c56081]
36
+ - @ai-sdk/provider@2.0.0-alpha.7
37
+ - @ai-sdk/openai-compatible@1.0.0-alpha.7
38
+ - @ai-sdk/provider-utils@3.0.0-alpha.7
31
39
 
32
- ## 0.2.10
40
+ ## 1.0.0-alpha.6
33
41
 
34
42
  ### Patch Changes
35
43
 
36
- - Updated dependencies [beef951]
37
- - @ai-sdk/provider@1.1.3
38
- - @ai-sdk/openai-compatible@0.2.10
39
- - @ai-sdk/provider-utils@2.2.7
44
+ - Updated dependencies [0d2c085]
45
+ - @ai-sdk/provider@2.0.0-alpha.6
46
+ - @ai-sdk/openai-compatible@1.0.0-alpha.6
47
+ - @ai-sdk/provider-utils@3.0.0-alpha.6
40
48
 
41
- ## 0.2.9
49
+ ## 1.0.0-alpha.4
42
50
 
43
51
  ### Patch Changes
44
52
 
45
- - Updated dependencies [1bbc698]
46
- - @ai-sdk/openai-compatible@0.2.9
53
+ - Updated dependencies [dc714f3]
54
+ - @ai-sdk/provider@2.0.0-alpha.4
55
+ - @ai-sdk/openai-compatible@1.0.0-alpha.4
56
+ - @ai-sdk/provider-utils@3.0.0-alpha.4
47
57
 
48
- ## 0.2.8
58
+ ## 1.0.0-alpha.3
49
59
 
50
60
  ### Patch Changes
51
61
 
52
- - Updated dependencies [013faa8]
53
- - @ai-sdk/provider@1.1.2
54
- - @ai-sdk/openai-compatible@0.2.8
55
- - @ai-sdk/provider-utils@2.2.6
62
+ - Updated dependencies [6b98118]
63
+ - @ai-sdk/provider@2.0.0-alpha.3
64
+ - @ai-sdk/openai-compatible@1.0.0-alpha.3
65
+ - @ai-sdk/provider-utils@3.0.0-alpha.3
56
66
 
57
- ## 0.2.7
67
+ ## 1.0.0-alpha.2
58
68
 
59
69
  ### Patch Changes
60
70
 
61
- - Updated dependencies [c21fa6d]
62
- - @ai-sdk/provider-utils@2.2.5
63
- - @ai-sdk/provider@1.1.1
64
- - @ai-sdk/openai-compatible@0.2.7
71
+ - Updated dependencies [26535e0]
72
+ - @ai-sdk/provider@2.0.0-alpha.2
73
+ - @ai-sdk/openai-compatible@1.0.0-alpha.2
74
+ - @ai-sdk/provider-utils@3.0.0-alpha.2
65
75
 
66
- ## 0.2.6
76
+ ## 1.0.0-alpha.1
67
77
 
68
78
  ### Patch Changes
69
79
 
70
- - Updated dependencies [2c19b9a]
71
- - @ai-sdk/provider-utils@2.2.4
72
- - @ai-sdk/openai-compatible@0.2.6
80
+ - Updated dependencies [3f2f00c]
81
+ - @ai-sdk/provider@2.0.0-alpha.1
82
+ - @ai-sdk/openai-compatible@1.0.0-alpha.1
83
+ - @ai-sdk/provider-utils@3.0.0-alpha.1
84
+
85
+ ## 1.0.0-canary.19
86
+
87
+ ### Patch Changes
88
+
89
+ - Updated dependencies [faf8446]
90
+ - @ai-sdk/provider-utils@3.0.0-canary.19
91
+ - @ai-sdk/openai-compatible@1.0.0-canary.19
92
+
93
+ ## 1.0.0-canary.18
94
+
95
+ ### Patch Changes
96
+
97
+ - Updated dependencies [40acf9b]
98
+ - @ai-sdk/provider-utils@3.0.0-canary.18
99
+ - @ai-sdk/openai-compatible@1.0.0-canary.18
100
+
101
+ ## 1.0.0-canary.17
102
+
103
+ ### Patch Changes
104
+
105
+ - Updated dependencies [516be5b]
106
+ - Updated dependencies [ea7a7c9]
107
+ - @ai-sdk/openai-compatible@1.0.0-canary.17
108
+ - @ai-sdk/provider-utils@3.0.0-canary.17
109
+
110
+ ## 1.0.0-canary.16
111
+
112
+ ### Patch Changes
113
+
114
+ - Updated dependencies [87b828f]
115
+ - @ai-sdk/provider-utils@3.0.0-canary.16
116
+ - @ai-sdk/openai-compatible@1.0.0-canary.16
117
+
118
+ ## 1.0.0-canary.15
119
+
120
+ ### Patch Changes
121
+
122
+ - Updated dependencies [a571d6e]
123
+ - Updated dependencies [a8c8bd5]
124
+ - Updated dependencies [7979f7f]
125
+ - Updated dependencies [41fa418]
126
+ - @ai-sdk/provider-utils@3.0.0-canary.15
127
+ - @ai-sdk/provider@2.0.0-canary.14
128
+ - @ai-sdk/openai-compatible@1.0.0-canary.15
129
+
130
+ ## 1.0.0-canary.14
131
+
132
+ ### Patch Changes
133
+
134
+ - Updated dependencies [957b739]
135
+ - Updated dependencies [9bd5ab5]
136
+ - @ai-sdk/provider-utils@3.0.0-canary.14
137
+ - @ai-sdk/provider@2.0.0-canary.13
138
+ - @ai-sdk/openai-compatible@1.0.0-canary.14
139
+
140
+ ## 1.0.0-canary.13
141
+
142
+ ### Patch Changes
143
+
144
+ - Updated dependencies [7b3ae3f]
145
+ - Updated dependencies [d9209ca]
146
+ - Updated dependencies [0ff02bb]
147
+ - @ai-sdk/provider@2.0.0-canary.12
148
+ - @ai-sdk/openai-compatible@1.0.0-canary.13
149
+ - @ai-sdk/provider-utils@3.0.0-canary.13
150
+
151
+ ## 1.0.0-canary.12
152
+
153
+ ### Patch Changes
154
+
155
+ - Updated dependencies [9bf7291]
156
+ - Updated dependencies [4617fab]
157
+ - Updated dependencies [e030615]
158
+ - @ai-sdk/provider@2.0.0-canary.11
159
+ - @ai-sdk/openai-compatible@1.0.0-canary.12
160
+ - @ai-sdk/provider-utils@3.0.0-canary.12
161
+
162
+ ## 1.0.0-canary.11
163
+
164
+ ### Patch Changes
165
+
166
+ - Updated dependencies [db72adc]
167
+ - Updated dependencies [42e32b0]
168
+ - Updated dependencies [66962ed]
169
+ - Updated dependencies [9301f86]
170
+ - Updated dependencies [a3f768e]
171
+ - @ai-sdk/openai-compatible@1.0.0-canary.11
172
+ - @ai-sdk/provider-utils@3.0.0-canary.11
173
+ - @ai-sdk/provider@2.0.0-canary.10
174
+
175
+ ## 1.0.0-canary.10
176
+
177
+ ### Patch Changes
178
+
179
+ - Updated dependencies [cf8280e]
180
+ - Updated dependencies [e86be6f]
181
+ - @ai-sdk/openai-compatible@1.0.0-canary.10
182
+ - @ai-sdk/provider@2.0.0-canary.9
183
+ - @ai-sdk/provider-utils@3.0.0-canary.10
184
+
185
+ ## 1.0.0-canary.9
186
+
187
+ ### Patch Changes
188
+
189
+ - Updated dependencies [95857aa]
190
+ - Updated dependencies [7ea4132]
191
+ - @ai-sdk/provider@2.0.0-canary.8
192
+ - @ai-sdk/openai-compatible@1.0.0-canary.9
193
+ - @ai-sdk/provider-utils@3.0.0-canary.9
194
+
195
+ ## 1.0.0-canary.8
196
+
197
+ ### Patch Changes
198
+
199
+ - Updated dependencies [5d142ab]
200
+ - Updated dependencies [b6b43c7]
201
+ - Updated dependencies [b9a6121]
202
+ - Updated dependencies [8aa9e20]
203
+ - Updated dependencies [3795467]
204
+ - @ai-sdk/provider-utils@3.0.0-canary.8
205
+ - @ai-sdk/provider@2.0.0-canary.7
206
+ - @ai-sdk/openai-compatible@1.0.0-canary.8
207
+
208
+ ## 1.0.0-canary.7
209
+
210
+ ### Patch Changes
211
+
212
+ - fa49207: feat(providers/openai-compatible): convert to providerOptions
213
+ - Updated dependencies [fa49207]
214
+ - Updated dependencies [26735b5]
215
+ - Updated dependencies [443d8ec]
216
+ - Updated dependencies [14c9410]
217
+ - Updated dependencies [d9c98f4]
218
+ - Updated dependencies [c4a2fec]
219
+ - Updated dependencies [0054544]
220
+ - Updated dependencies [9e9c809]
221
+ - Updated dependencies [32831c6]
222
+ - Updated dependencies [d0f9495]
223
+ - Updated dependencies [fd65bc6]
224
+ - Updated dependencies [393138b]
225
+ - Updated dependencies [7182d14]
226
+ - @ai-sdk/openai-compatible@1.0.0-canary.7
227
+ - @ai-sdk/provider@2.0.0-canary.6
228
+ - @ai-sdk/provider-utils@3.0.0-canary.7
229
+
230
+ ## 1.0.0-canary.6
231
+
232
+ ### Patch Changes
233
+
234
+ - Updated dependencies [6db02c9]
235
+ - Updated dependencies [411e483]
236
+ - Updated dependencies [79457bd]
237
+ - Updated dependencies [ad80501]
238
+ - Updated dependencies [1766ede]
239
+ - Updated dependencies [f10304b]
240
+ - @ai-sdk/openai-compatible@1.0.0-canary.6
241
+ - @ai-sdk/provider@2.0.0-canary.5
242
+ - @ai-sdk/provider-utils@3.0.0-canary.6
243
+
244
+ ## 1.0.0-canary.5
245
+
246
+ ### Patch Changes
247
+
248
+ - Updated dependencies [6f6bb89]
249
+ - @ai-sdk/provider@2.0.0-canary.4
250
+ - @ai-sdk/openai-compatible@1.0.0-canary.5
251
+ - @ai-sdk/provider-utils@3.0.0-canary.5
252
+
253
+ ## 1.0.0-canary.4
254
+
255
+ ### Patch Changes
256
+
257
+ - Updated dependencies [d1a1aa1]
258
+ - @ai-sdk/provider@2.0.0-canary.3
259
+ - @ai-sdk/openai-compatible@1.0.0-canary.4
260
+ - @ai-sdk/provider-utils@3.0.0-canary.4
261
+
262
+ ## 1.0.0-canary.3
263
+
264
+ ### Patch Changes
265
+
266
+ - Updated dependencies [a166433]
267
+ - Updated dependencies [abf9a79]
268
+ - Updated dependencies [9f95b35]
269
+ - Updated dependencies [0a87932]
270
+ - Updated dependencies [6dc848c]
271
+ - @ai-sdk/provider-utils@3.0.0-canary.3
272
+ - @ai-sdk/provider@2.0.0-canary.2
273
+ - @ai-sdk/openai-compatible@1.0.0-canary.3
274
+
275
+ ## 1.0.0-canary.2
276
+
277
+ ### Patch Changes
278
+
279
+ - Updated dependencies [c57e248]
280
+ - Updated dependencies [33f4a6a]
281
+ - @ai-sdk/provider@2.0.0-canary.1
282
+ - @ai-sdk/openai-compatible@1.0.0-canary.2
283
+ - @ai-sdk/provider-utils@3.0.0-canary.2
284
+
285
+ ## 1.0.0-canary.1
286
+
287
+ ### Patch Changes
288
+
289
+ - Updated dependencies [060370c]
290
+ - Updated dependencies [0c0c0b3]
291
+ - Updated dependencies [63d791d]
292
+ - @ai-sdk/provider-utils@3.0.0-canary.1
293
+ - @ai-sdk/openai-compatible@1.0.0-canary.1
294
+
295
+ ## 1.0.0-canary.0
296
+
297
+ ### Major Changes
298
+
299
+ - d5f588f: AI SDK 5
300
+
301
+ ### Patch Changes
302
+
303
+ - Updated dependencies [d5f588f]
304
+ - @ai-sdk/provider-utils@3.0.0-canary.0
305
+ - @ai-sdk/openai-compatible@1.0.0-canary.0
306
+ - @ai-sdk/provider@2.0.0-canary.0
73
307
 
74
308
  ## 0.2.5
75
309
 
package/dist/index.d.mts CHANGED
@@ -1,11 +1,8 @@
1
- import { ProviderV1, LanguageModelV1 } from '@ai-sdk/provider';
1
+ import { ProviderV2, LanguageModelV2 } from '@ai-sdk/provider';
2
2
  import { FetchFunction } from '@ai-sdk/provider-utils';
3
- import { OpenAICompatibleChatSettings } from '@ai-sdk/openai-compatible';
4
3
  export { OpenAICompatibleErrorData as DeepSeekErrorData } from '@ai-sdk/openai-compatible';
5
4
 
6
5
  type DeepSeekChatModelId = 'deepseek-chat' | 'deepseek-reasoner' | (string & {});
7
- interface DeepSeekChatSettings extends OpenAICompatibleChatSettings {
8
- }
9
6
 
10
7
  interface DeepSeekProviderSettings {
11
8
  /**
@@ -26,19 +23,19 @@ interface DeepSeekProviderSettings {
26
23
  */
27
24
  fetch?: FetchFunction;
28
25
  }
29
- interface DeepSeekProvider extends ProviderV1 {
26
+ interface DeepSeekProvider extends ProviderV2 {
30
27
  /**
31
28
  Creates a DeepSeek model for text generation.
32
29
  */
33
- (modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV1;
30
+ (modelId: DeepSeekChatModelId): LanguageModelV2;
34
31
  /**
35
32
  Creates a DeepSeek model for text generation.
36
33
  */
37
- languageModel(modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV1;
34
+ languageModel(modelId: DeepSeekChatModelId): LanguageModelV2;
38
35
  /**
39
36
  Creates a DeepSeek chat model for text generation.
40
37
  */
41
- chat(modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV1;
38
+ chat(modelId: DeepSeekChatModelId): LanguageModelV2;
42
39
  }
43
40
  declare function createDeepSeek(options?: DeepSeekProviderSettings): DeepSeekProvider;
44
41
  declare const deepseek: DeepSeekProvider;
package/dist/index.d.ts CHANGED
@@ -1,11 +1,8 @@
1
- import { ProviderV1, LanguageModelV1 } from '@ai-sdk/provider';
1
+ import { ProviderV2, LanguageModelV2 } from '@ai-sdk/provider';
2
2
  import { FetchFunction } from '@ai-sdk/provider-utils';
3
- import { OpenAICompatibleChatSettings } from '@ai-sdk/openai-compatible';
4
3
  export { OpenAICompatibleErrorData as DeepSeekErrorData } from '@ai-sdk/openai-compatible';
5
4
 
6
5
  type DeepSeekChatModelId = 'deepseek-chat' | 'deepseek-reasoner' | (string & {});
7
- interface DeepSeekChatSettings extends OpenAICompatibleChatSettings {
8
- }
9
6
 
10
7
  interface DeepSeekProviderSettings {
11
8
  /**
@@ -26,19 +23,19 @@ interface DeepSeekProviderSettings {
26
23
  */
27
24
  fetch?: FetchFunction;
28
25
  }
29
- interface DeepSeekProvider extends ProviderV1 {
26
+ interface DeepSeekProvider extends ProviderV2 {
30
27
  /**
31
28
  Creates a DeepSeek model for text generation.
32
29
  */
33
- (modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV1;
30
+ (modelId: DeepSeekChatModelId): LanguageModelV2;
34
31
  /**
35
32
  Creates a DeepSeek model for text generation.
36
33
  */
37
- languageModel(modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV1;
34
+ languageModel(modelId: DeepSeekChatModelId): LanguageModelV2;
38
35
  /**
39
36
  Creates a DeepSeek chat model for text generation.
40
37
  */
41
- chat(modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV1;
38
+ chat(modelId: DeepSeekChatModelId): LanguageModelV2;
42
39
  }
43
40
  declare function createDeepSeek(options?: DeepSeekProviderSettings): DeepSeekProvider;
44
41
  declare const deepseek: DeepSeekProvider;
package/dist/index.js CHANGED
@@ -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
  });
@@ -97,22 +97,24 @@ function createDeepSeek(options = {}) {
97
97
  })}`,
98
98
  ...options.headers
99
99
  });
100
- const createLanguageModel = (modelId, settings = {}) => {
101
- return new import_openai_compatible.OpenAICompatibleChatLanguageModel(modelId, settings, {
100
+ const createLanguageModel = (modelId) => {
101
+ return new import_openai_compatible.OpenAICompatibleChatLanguageModel(modelId, {
102
102
  provider: `deepseek.chat`,
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
  };
110
- const provider = (modelId, settings) => createLanguageModel(modelId, settings);
109
+ const provider = (modelId) => createLanguageModel(modelId);
111
110
  provider.languageModel = createLanguageModel;
112
111
  provider.chat = createLanguageModel;
113
112
  provider.textEmbeddingModel = (modelId) => {
114
113
  throw new import_provider.NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
115
114
  };
115
+ provider.imageModel = (modelId) => {
116
+ throw new import_provider.NoSuchModelError({ modelId, modelType: "imageModel" });
117
+ };
116
118
  return provider;
117
119
  }
118
120
  var deepseek = createDeepSeek();
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 LanguageModelV1,\n NoSuchModelError,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n DeepSeekChatModelId,\n DeepSeekChatSettings,\n} 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 ProviderV1 {\n /**\nCreates a DeepSeek model for text generation.\n*/\n (\n modelId: DeepSeekChatModelId,\n settings?: DeepSeekChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a DeepSeek model for text generation.\n*/\n languageModel(\n modelId: DeepSeekChatModelId,\n settings?: DeepSeekChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a DeepSeek chat model for text generation.\n*/\n chat(\n modelId: DeepSeekChatModelId,\n settings?: DeepSeekChatSettings,\n ): LanguageModelV1;\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 = (\n modelId: DeepSeekChatModelId,\n settings: DeepSeekChatSettings = {},\n ) => {\n return new OpenAICompatibleChatLanguageModel(modelId, settings, {\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 = (\n modelId: DeepSeekChatModelId,\n settings?: DeepSeekChatSettings,\n ) => createLanguageModel(modelId, settings);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\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;;;ADPM,SAAS,eACd,UAAoC,CAAC,GACnB;AAjEpB;AAkEE,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,CAC1B,SACA,WAAiC,CAAC,MAC/B;AACH,WAAO,IAAI,2DAAkC,SAAS,UAAU;AAAA,MAC9D,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,CACf,SACA,aACG,oBAAoB,SAAS,QAAQ;AAE1C,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAChB,WAAS,qBAAqB,CAAC,YAAoB;AACjD,UAAM,IAAI,iCAAiB,EAAE,SAAS,WAAW,qBAAqB,CAAC;AAAA,EACzE;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';\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,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,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,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,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
@@ -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
  });
@@ -75,22 +75,24 @@ function createDeepSeek(options = {}) {
75
75
  })}`,
76
76
  ...options.headers
77
77
  });
78
- const createLanguageModel = (modelId, settings = {}) => {
79
- return new OpenAICompatibleChatLanguageModel(modelId, settings, {
78
+ const createLanguageModel = (modelId) => {
79
+ return new OpenAICompatibleChatLanguageModel(modelId, {
80
80
  provider: `deepseek.chat`,
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
  };
88
- const provider = (modelId, settings) => createLanguageModel(modelId, settings);
87
+ const provider = (modelId) => createLanguageModel(modelId);
89
88
  provider.languageModel = createLanguageModel;
90
89
  provider.chat = createLanguageModel;
91
90
  provider.textEmbeddingModel = (modelId) => {
92
91
  throw new NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
93
92
  };
93
+ provider.imageModel = (modelId) => {
94
+ throw new NoSuchModelError({ modelId, modelType: "imageModel" });
95
+ };
94
96
  return provider;
95
97
  }
96
98
  var deepseek = createDeepSeek();
@@ -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 LanguageModelV1,\n NoSuchModelError,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n DeepSeekChatModelId,\n DeepSeekChatSettings,\n} 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 ProviderV1 {\n /**\nCreates a DeepSeek model for text generation.\n*/\n (\n modelId: DeepSeekChatModelId,\n settings?: DeepSeekChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a DeepSeek model for text generation.\n*/\n languageModel(\n modelId: DeepSeekChatModelId,\n settings?: DeepSeekChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a DeepSeek chat model for text generation.\n*/\n chat(\n modelId: DeepSeekChatModelId,\n settings?: DeepSeekChatSettings,\n ): LanguageModelV1;\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 = (\n modelId: DeepSeekChatModelId,\n settings: DeepSeekChatSettings = {},\n ) => {\n return new OpenAICompatibleChatLanguageModel(modelId, settings, {\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 = (\n modelId: DeepSeekChatModelId,\n settings?: DeepSeekChatSettings,\n ) => createLanguageModel(modelId, settings);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\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;;;ADPM,SAAS,eACd,UAAoC,CAAC,GACnB;AAjEpB;AAkEE,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,CAC1B,SACA,WAAiC,CAAC,MAC/B;AACH,WAAO,IAAI,kCAAkC,SAAS,UAAU;AAAA,MAC9D,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,CACf,SACA,aACG,oBAAoB,SAAS,QAAQ;AAE1C,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAChB,WAAS,qBAAqB,CAAC,YAAoB;AACjD,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,qBAAqB,CAAC;AAAA,EACzE;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';\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": "0.2.14",
3
+ "version": "1.0.0-alpha.10",
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": "0.2.14",
23
- "@ai-sdk/provider": "1.1.3",
24
- "@ai-sdk/provider-utils": "2.2.8"
22
+ "@ai-sdk/openai-compatible": "1.0.0-alpha.10",
23
+ "@ai-sdk/provider": "2.0.0-alpha.10",
24
+ "@ai-sdk/provider-utils": "3.0.0-alpha.10"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "20.17.24",
28
28
  "tsup": "^8",
29
- "typescript": "5.6.3",
30
- "zod": "3.23.8",
29
+ "typescript": "5.8.3",
30
+ "zod": "3.25.49",
31
31
  "@vercel/ai-tsconfig": "0.0.0"
32
32
  },
33
33
  "peerDependencies": {
34
- "zod": "^3.0.0"
34
+ "zod": "^3.25.49"
35
35
  },
36
36
  "engines": {
37
37
  "node": ">=18"
@@ -51,13 +51,15 @@
51
51
  "ai"
52
52
  ],
53
53
  "scripts": {
54
- "build": "tsup",
55
- "build:watch": "tsup --watch",
56
- "clean": "rm -rf dist",
54
+ "build": "pnpm clean && tsup --tsconfig tsconfig.build.json",
55
+ "build:watch": "pnpm clean && tsup --watch",
56
+ "clean": "rm -rf dist *.tsbuildinfo",
57
57
  "lint": "eslint \"./**/*.ts*\"",
58
- "type-check": "tsc --noEmit",
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
  }