@ai-sdk/deepseek 0.2.6 → 1.0.0-canary.1

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,12 +1,27 @@
1
1
  # @ai-sdk/deepseek
2
2
 
3
- ## 0.2.6
3
+ ## 1.0.0-canary.1
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - Updated dependencies [2c19b9a]
8
- - @ai-sdk/provider-utils@2.2.4
9
- - @ai-sdk/openai-compatible@0.2.6
7
+ - Updated dependencies [060370c]
8
+ - Updated dependencies [0c0c0b3]
9
+ - Updated dependencies [63d791d]
10
+ - @ai-sdk/provider-utils@3.0.0-canary.1
11
+ - @ai-sdk/openai-compatible@1.0.0-canary.1
12
+
13
+ ## 1.0.0-canary.0
14
+
15
+ ### Major Changes
16
+
17
+ - d5f588f: AI SDK 5
18
+
19
+ ### Patch Changes
20
+
21
+ - Updated dependencies [d5f588f]
22
+ - @ai-sdk/provider-utils@3.0.0-canary.0
23
+ - @ai-sdk/openai-compatible@1.0.0-canary.0
24
+ - @ai-sdk/provider@2.0.0-canary.0
10
25
 
11
26
  ## 0.2.5
12
27
 
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
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
3
  import { OpenAICompatibleChatSettings } from '@ai-sdk/openai-compatible';
4
4
  export { OpenAICompatibleErrorData as DeepSeekErrorData } from '@ai-sdk/openai-compatible';
@@ -26,19 +26,19 @@ interface DeepSeekProviderSettings {
26
26
  */
27
27
  fetch?: FetchFunction;
28
28
  }
29
- interface DeepSeekProvider extends ProviderV1 {
29
+ interface DeepSeekProvider extends ProviderV2 {
30
30
  /**
31
31
  Creates a DeepSeek model for text generation.
32
32
  */
33
- (modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV1;
33
+ (modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV2;
34
34
  /**
35
35
  Creates a DeepSeek model for text generation.
36
36
  */
37
- languageModel(modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV1;
37
+ languageModel(modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV2;
38
38
  /**
39
39
  Creates a DeepSeek chat model for text generation.
40
40
  */
41
- chat(modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV1;
41
+ chat(modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV2;
42
42
  }
43
43
  declare function createDeepSeek(options?: DeepSeekProviderSettings): DeepSeekProvider;
44
44
  declare const deepseek: DeepSeekProvider;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
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
3
  import { OpenAICompatibleChatSettings } from '@ai-sdk/openai-compatible';
4
4
  export { OpenAICompatibleErrorData as DeepSeekErrorData } from '@ai-sdk/openai-compatible';
@@ -26,19 +26,19 @@ interface DeepSeekProviderSettings {
26
26
  */
27
27
  fetch?: FetchFunction;
28
28
  }
29
- interface DeepSeekProvider extends ProviderV1 {
29
+ interface DeepSeekProvider extends ProviderV2 {
30
30
  /**
31
31
  Creates a DeepSeek model for text generation.
32
32
  */
33
- (modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV1;
33
+ (modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV2;
34
34
  /**
35
35
  Creates a DeepSeek model for text generation.
36
36
  */
37
- languageModel(modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV1;
37
+ languageModel(modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV2;
38
38
  /**
39
39
  Creates a DeepSeek chat model for text generation.
40
40
  */
41
- chat(modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV1;
41
+ chat(modelId: DeepSeekChatModelId, settings?: DeepSeekChatSettings): LanguageModelV2;
42
42
  }
43
43
  declare function createDeepSeek(options?: DeepSeekProviderSettings): DeepSeekProvider;
44
44
  declare const deepseek: DeepSeekProvider;
package/dist/index.js CHANGED
@@ -113,6 +113,9 @@ function createDeepSeek(options = {}) {
113
113
  provider.textEmbeddingModel = (modelId) => {
114
114
  throw new import_provider.NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
115
115
  };
116
+ provider.imageModel = (modelId) => {
117
+ throw new import_provider.NoSuchModelError({ modelId, modelType: "imageModel" });
118
+ };
116
119
  return provider;
117
120
  }
118
121
  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 {\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 ProviderV2 {\n /**\nCreates a DeepSeek model for text generation.\n*/\n (\n modelId: DeepSeekChatModelId,\n settings?: DeepSeekChatSettings,\n ): LanguageModelV2;\n\n /**\nCreates a DeepSeek model for text generation.\n*/\n languageModel(\n modelId: DeepSeekChatModelId,\n settings?: DeepSeekChatSettings,\n ): LanguageModelV2;\n\n /**\nCreates a DeepSeek chat model for text generation.\n*/\n chat(\n modelId: DeepSeekChatModelId,\n settings?: DeepSeekChatSettings,\n ): 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 = (\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\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;;;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;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
@@ -91,6 +91,9 @@ function createDeepSeek(options = {}) {
91
91
  provider.textEmbeddingModel = (modelId) => {
92
92
  throw new NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
93
93
  };
94
+ provider.imageModel = (modelId) => {
95
+ throw new NoSuchModelError({ modelId, modelType: "imageModel" });
96
+ };
94
97
  return provider;
95
98
  }
96
99
  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 {\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 ProviderV2 {\n /**\nCreates a DeepSeek model for text generation.\n*/\n (\n modelId: DeepSeekChatModelId,\n settings?: DeepSeekChatSettings,\n ): LanguageModelV2;\n\n /**\nCreates a DeepSeek model for text generation.\n*/\n languageModel(\n modelId: DeepSeekChatModelId,\n settings?: DeepSeekChatSettings,\n ): LanguageModelV2;\n\n /**\nCreates a DeepSeek chat model for text generation.\n*/\n chat(\n modelId: DeepSeekChatModelId,\n settings?: DeepSeekChatSettings,\n ): 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 = (\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\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;;;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;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.6",
3
+ "version": "1.0.0-canary.1",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -19,9 +19,9 @@
19
19
  }
20
20
  },
21
21
  "dependencies": {
22
- "@ai-sdk/openai-compatible": "0.2.6",
23
- "@ai-sdk/provider": "1.1.0",
24
- "@ai-sdk/provider-utils": "2.2.4"
22
+ "@ai-sdk/openai-compatible": "1.0.0-canary.1",
23
+ "@ai-sdk/provider": "2.0.0-canary.0",
24
+ "@ai-sdk/provider-utils": "3.0.0-canary.1"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "20.17.24",