@ai-sdk/deepseek 3.0.0-beta.5 → 3.0.0-beta.56
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 +418 -4
- package/README.md +2 -0
- package/dist/index.d.ts +12 -4
- package/dist/index.js +169 -225
- package/dist/index.js.map +1 -1
- package/dist/internal/index.d.ts +57 -0
- package/dist/{index.mjs → internal/index.js} +83 -182
- package/dist/internal/index.js.map +1 -0
- package/docs/30-deepseek.mdx +31 -19
- package/internal.d.ts +1 -0
- package/package.json +21 -15
- package/src/chat/convert-to-deepseek-chat-messages.ts +11 -5
- package/src/chat/convert-to-deepseek-usage.ts +1 -1
- package/src/chat/deepseek-chat-language-model-options.ts +34 -0
- package/src/chat/deepseek-chat-language-model.ts +77 -154
- package/src/chat/deepseek-prepare-tools.ts +5 -2
- package/src/chat/map-deepseek-finish-reason.ts +1 -1
- package/src/deepseek-provider.ts +5 -5
- package/src/index.ts +12 -5
- package/src/internal/index.ts +2 -0
- package/dist/index.d.mts +0 -68
- package/dist/index.mjs.map +0 -1
- package/src/chat/deepseek-chat-options.ts +0 -22
|
@@ -1,34 +1,28 @@
|
|
|
1
|
-
// src/deepseek-provider.ts
|
|
2
|
-
import {
|
|
3
|
-
NoSuchModelError
|
|
4
|
-
} from "@ai-sdk/provider";
|
|
5
|
-
import {
|
|
6
|
-
loadApiKey,
|
|
7
|
-
withoutTrailingSlash,
|
|
8
|
-
withUserAgentSuffix
|
|
9
|
-
} from "@ai-sdk/provider-utils";
|
|
10
|
-
|
|
11
1
|
// src/chat/deepseek-chat-language-model.ts
|
|
12
|
-
import {
|
|
13
|
-
InvalidResponseDataError
|
|
14
|
-
} from "@ai-sdk/provider";
|
|
15
2
|
import {
|
|
16
3
|
combineHeaders,
|
|
17
4
|
createEventSourceResponseHandler,
|
|
18
5
|
createJsonErrorResponseHandler,
|
|
19
6
|
createJsonResponseHandler,
|
|
20
7
|
generateId,
|
|
21
|
-
|
|
8
|
+
isCustomReasoning,
|
|
9
|
+
mapReasoningToProviderEffort,
|
|
22
10
|
parseProviderOptions,
|
|
23
|
-
postJsonToApi
|
|
11
|
+
postJsonToApi,
|
|
12
|
+
serializeModelOptions,
|
|
13
|
+
StreamingToolCallTracker,
|
|
14
|
+
WORKFLOW_SERIALIZE,
|
|
15
|
+
WORKFLOW_DESERIALIZE
|
|
24
16
|
} from "@ai-sdk/provider-utils";
|
|
25
17
|
|
|
26
18
|
// src/chat/convert-to-deepseek-chat-messages.ts
|
|
27
19
|
function convertToDeepSeekChatMessages({
|
|
28
20
|
prompt,
|
|
29
|
-
responseFormat
|
|
21
|
+
responseFormat,
|
|
22
|
+
modelId
|
|
30
23
|
}) {
|
|
31
24
|
var _a;
|
|
25
|
+
const isDeepSeekV4 = modelId.includes("deepseek-v4");
|
|
32
26
|
const messages = [];
|
|
33
27
|
const warnings = [];
|
|
34
28
|
if ((responseFormat == null ? void 0 : responseFormat.type) === "json") {
|
|
@@ -93,7 +87,7 @@ function convertToDeepSeekChatMessages({
|
|
|
93
87
|
break;
|
|
94
88
|
}
|
|
95
89
|
case "reasoning": {
|
|
96
|
-
if (index <= lastUserMessageIndex) {
|
|
90
|
+
if (index <= lastUserMessageIndex && !isDeepSeekV4) {
|
|
97
91
|
break;
|
|
98
92
|
}
|
|
99
93
|
if (reasoning == null) {
|
|
@@ -119,7 +113,7 @@ function convertToDeepSeekChatMessages({
|
|
|
119
113
|
messages.push({
|
|
120
114
|
role: "assistant",
|
|
121
115
|
content: text,
|
|
122
|
-
reasoning_content: reasoning,
|
|
116
|
+
reasoning_content: reasoning != null ? reasoning : isDeepSeekV4 ? "" : void 0,
|
|
123
117
|
tool_calls: toolCalls.length > 0 ? toolCalls : void 0
|
|
124
118
|
});
|
|
125
119
|
break;
|
|
@@ -137,7 +131,7 @@ function convertToDeepSeekChatMessages({
|
|
|
137
131
|
contentValue = output.value;
|
|
138
132
|
break;
|
|
139
133
|
case "execution-denied":
|
|
140
|
-
contentValue = (_a = output.reason) != null ? _a : "Tool execution denied.";
|
|
134
|
+
contentValue = (_a = output.reason) != null ? _a : "Tool call execution denied.";
|
|
141
135
|
break;
|
|
142
136
|
case "content":
|
|
143
137
|
case "json":
|
|
@@ -284,15 +278,26 @@ var deepseekChatChunkSchema = lazySchema(
|
|
|
284
278
|
)
|
|
285
279
|
);
|
|
286
280
|
|
|
287
|
-
// src/chat/deepseek-chat-options.ts
|
|
281
|
+
// src/chat/deepseek-chat-language-model-options.ts
|
|
288
282
|
import { z as z2 } from "zod/v4";
|
|
289
|
-
var
|
|
283
|
+
var deepseekLanguageModelChatOptions = z2.object({
|
|
290
284
|
/**
|
|
291
285
|
* Type of thinking to use. Defaults to `enabled`.
|
|
286
|
+
*
|
|
287
|
+
* See https://api-docs.deepseek.com/guides/thinking_mode for the
|
|
288
|
+
* `adaptive` option, which lets the model decide when to think.
|
|
292
289
|
*/
|
|
293
290
|
thinking: z2.object({
|
|
294
|
-
type: z2.enum(["enabled", "disabled"]).optional()
|
|
295
|
-
}).optional()
|
|
291
|
+
type: z2.enum(["adaptive", "enabled", "disabled"]).optional()
|
|
292
|
+
}).optional(),
|
|
293
|
+
/**
|
|
294
|
+
* Controls the thinking strength for DeepSeek V4 reasoning models.
|
|
295
|
+
*
|
|
296
|
+
* DeepSeek's API accepts `low`, `medium`, `high`, `xhigh`, and `max`.
|
|
297
|
+
* Per their docs, `low` and `medium` are mapped to `high`, and `xhigh`
|
|
298
|
+
* is mapped to `max` server-side for compatibility with other providers.
|
|
299
|
+
*/
|
|
300
|
+
reasoningEffort: z2.enum(["low", "medium", "high", "xhigh", "max"]).optional()
|
|
296
301
|
});
|
|
297
302
|
|
|
298
303
|
// src/chat/deepseek-prepare-tools.ts
|
|
@@ -390,7 +395,7 @@ function mapDeepSeekFinishReason(finishReason) {
|
|
|
390
395
|
}
|
|
391
396
|
|
|
392
397
|
// src/chat/deepseek-chat-language-model.ts
|
|
393
|
-
var DeepSeekChatLanguageModel = class {
|
|
398
|
+
var DeepSeekChatLanguageModel = class _DeepSeekChatLanguageModel {
|
|
394
399
|
constructor(modelId, config) {
|
|
395
400
|
this.specificationVersion = "v4";
|
|
396
401
|
this.supportedUrls = {};
|
|
@@ -401,6 +406,15 @@ var DeepSeekChatLanguageModel = class {
|
|
|
401
406
|
errorToMessage: (error) => error.error.message
|
|
402
407
|
});
|
|
403
408
|
}
|
|
409
|
+
static [WORKFLOW_SERIALIZE](model) {
|
|
410
|
+
return serializeModelOptions({
|
|
411
|
+
modelId: model.modelId,
|
|
412
|
+
config: model.config
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
static [WORKFLOW_DESERIALIZE](options) {
|
|
416
|
+
return new _DeepSeekChatLanguageModel(options.modelId, options.config);
|
|
417
|
+
}
|
|
404
418
|
get provider() {
|
|
405
419
|
return this.config.provider;
|
|
406
420
|
}
|
|
@@ -415,6 +429,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
415
429
|
topK,
|
|
416
430
|
frequencyPenalty,
|
|
417
431
|
presencePenalty,
|
|
432
|
+
reasoning,
|
|
418
433
|
providerOptions,
|
|
419
434
|
stopSequences,
|
|
420
435
|
responseFormat,
|
|
@@ -422,21 +437,23 @@ var DeepSeekChatLanguageModel = class {
|
|
|
422
437
|
toolChoice,
|
|
423
438
|
tools
|
|
424
439
|
}) {
|
|
425
|
-
var _a, _b;
|
|
440
|
+
var _a, _b, _c;
|
|
426
441
|
const deepseekOptions = (_a = await parseProviderOptions({
|
|
427
442
|
provider: this.providerOptionsName,
|
|
428
443
|
providerOptions,
|
|
429
|
-
schema:
|
|
444
|
+
schema: deepseekLanguageModelChatOptions
|
|
430
445
|
})) != null ? _a : {};
|
|
431
446
|
const { messages, warnings } = convertToDeepSeekChatMessages({
|
|
432
447
|
prompt,
|
|
433
|
-
responseFormat
|
|
448
|
+
responseFormat,
|
|
449
|
+
modelId: this.modelId
|
|
434
450
|
});
|
|
451
|
+
const allWarnings = [...warnings];
|
|
435
452
|
if (topK != null) {
|
|
436
|
-
|
|
453
|
+
allWarnings.push({ type: "unsupported", feature: "topK" });
|
|
437
454
|
}
|
|
438
455
|
if (seed != null) {
|
|
439
|
-
|
|
456
|
+
allWarnings.push({ type: "unsupported", feature: "seed" });
|
|
440
457
|
}
|
|
441
458
|
const {
|
|
442
459
|
tools: deepseekTools,
|
|
@@ -446,6 +463,18 @@ var DeepSeekChatLanguageModel = class {
|
|
|
446
463
|
tools,
|
|
447
464
|
toolChoice
|
|
448
465
|
});
|
|
466
|
+
const thinking = this.config.supportsThinking === false ? void 0 : ((_b = deepseekOptions.thinking) == null ? void 0 : _b.type) != null ? { type: deepseekOptions.thinking.type } : isCustomReasoning(reasoning) ? { type: reasoning === "none" ? "disabled" : "enabled" } : void 0;
|
|
467
|
+
const reasoningEffort = (_c = deepseekOptions.reasoningEffort) != null ? _c : isCustomReasoning(reasoning) && reasoning !== "none" ? mapReasoningToProviderEffort({
|
|
468
|
+
reasoning,
|
|
469
|
+
effortMap: {
|
|
470
|
+
minimal: "low",
|
|
471
|
+
low: "low",
|
|
472
|
+
medium: "medium",
|
|
473
|
+
high: "high",
|
|
474
|
+
xhigh: "max"
|
|
475
|
+
},
|
|
476
|
+
warnings: allWarnings
|
|
477
|
+
}) : void 0;
|
|
449
478
|
return {
|
|
450
479
|
args: {
|
|
451
480
|
model: this.modelId,
|
|
@@ -459,13 +488,16 @@ var DeepSeekChatLanguageModel = class {
|
|
|
459
488
|
messages,
|
|
460
489
|
tools: deepseekTools,
|
|
461
490
|
tool_choice: deepseekToolChoices,
|
|
462
|
-
thinking
|
|
491
|
+
thinking,
|
|
492
|
+
...(thinking == null ? void 0 : thinking.type) !== "disabled" && reasoningEffort != null && {
|
|
493
|
+
reasoning_effort: reasoningEffort
|
|
494
|
+
}
|
|
463
495
|
},
|
|
464
|
-
warnings: [...
|
|
496
|
+
warnings: [...allWarnings, ...toolWarnings]
|
|
465
497
|
};
|
|
466
498
|
}
|
|
467
499
|
async doGenerate(options) {
|
|
468
|
-
var _a, _b, _c, _d;
|
|
500
|
+
var _a, _b, _c, _d, _e, _f;
|
|
469
501
|
const { args, warnings } = await this.getArgs({ ...options });
|
|
470
502
|
const {
|
|
471
503
|
responseHeaders,
|
|
@@ -476,7 +508,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
476
508
|
path: "/chat/completions",
|
|
477
509
|
modelId: this.modelId
|
|
478
510
|
}),
|
|
479
|
-
headers: combineHeaders(this.config.headers(), options.headers),
|
|
511
|
+
headers: combineHeaders((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
|
|
480
512
|
body: args,
|
|
481
513
|
failedResponseHandler: this.failedResponseHandler,
|
|
482
514
|
successfulResponseHandler: createJsonResponseHandler(
|
|
@@ -498,7 +530,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
498
530
|
for (const toolCall of choice.message.tool_calls) {
|
|
499
531
|
content.push({
|
|
500
532
|
type: "tool-call",
|
|
501
|
-
toolCallId: (
|
|
533
|
+
toolCallId: (_c = toolCall.id) != null ? _c : generateId(),
|
|
502
534
|
toolName: toolCall.function.name,
|
|
503
535
|
input: toolCall.function.arguments
|
|
504
536
|
});
|
|
@@ -512,13 +544,13 @@ var DeepSeekChatLanguageModel = class {
|
|
|
512
544
|
content,
|
|
513
545
|
finishReason: {
|
|
514
546
|
unified: mapDeepSeekFinishReason(choice.finish_reason),
|
|
515
|
-
raw: (
|
|
547
|
+
raw: (_d = choice.finish_reason) != null ? _d : void 0
|
|
516
548
|
},
|
|
517
549
|
usage: convertDeepSeekUsage(responseBody.usage),
|
|
518
550
|
providerMetadata: {
|
|
519
551
|
[this.providerOptionsName]: {
|
|
520
|
-
promptCacheHitTokens: (
|
|
521
|
-
promptCacheMissTokens: (
|
|
552
|
+
promptCacheHitTokens: (_e = responseBody.usage) == null ? void 0 : _e.prompt_cache_hit_tokens,
|
|
553
|
+
promptCacheMissTokens: (_f = responseBody.usage) == null ? void 0 : _f.prompt_cache_miss_tokens
|
|
522
554
|
}
|
|
523
555
|
},
|
|
524
556
|
request: { body: args },
|
|
@@ -531,6 +563,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
531
563
|
};
|
|
532
564
|
}
|
|
533
565
|
async doStream(options) {
|
|
566
|
+
var _a, _b;
|
|
534
567
|
const { args, warnings } = await this.getArgs({ ...options });
|
|
535
568
|
const body = {
|
|
536
569
|
...args,
|
|
@@ -542,7 +575,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
542
575
|
path: "/chat/completions",
|
|
543
576
|
modelId: this.modelId
|
|
544
577
|
}),
|
|
545
|
-
headers: combineHeaders(this.config.headers(), options.headers),
|
|
578
|
+
headers: combineHeaders((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
|
|
546
579
|
body,
|
|
547
580
|
failedResponseHandler: this.failedResponseHandler,
|
|
548
581
|
successfulResponseHandler: createEventSourceResponseHandler(
|
|
@@ -551,7 +584,7 @@ var DeepSeekChatLanguageModel = class {
|
|
|
551
584
|
abortSignal: options.abortSignal,
|
|
552
585
|
fetch: this.config.fetch
|
|
553
586
|
});
|
|
554
|
-
|
|
587
|
+
let toolCallTracker;
|
|
555
588
|
let finishReason = {
|
|
556
589
|
unified: "other",
|
|
557
590
|
raw: void 0
|
|
@@ -565,10 +598,12 @@ var DeepSeekChatLanguageModel = class {
|
|
|
565
598
|
stream: response.pipeThrough(
|
|
566
599
|
new TransformStream({
|
|
567
600
|
start(controller) {
|
|
601
|
+
toolCallTracker = new StreamingToolCallTracker(controller, {
|
|
602
|
+
generateId
|
|
603
|
+
});
|
|
568
604
|
controller.enqueue({ type: "stream-start", warnings });
|
|
569
605
|
},
|
|
570
606
|
transform(chunk, controller) {
|
|
571
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
572
607
|
if (options.includeRawChunks) {
|
|
573
608
|
controller.enqueue({ type: "raw", rawValue: chunk.rawValue });
|
|
574
609
|
}
|
|
@@ -646,117 +681,27 @@ var DeepSeekChatLanguageModel = class {
|
|
|
646
681
|
isActiveReasoning = false;
|
|
647
682
|
}
|
|
648
683
|
for (const toolCallDelta of delta.tool_calls) {
|
|
649
|
-
|
|
650
|
-
if (toolCalls[index] == null) {
|
|
651
|
-
if (toolCallDelta.id == null) {
|
|
652
|
-
throw new InvalidResponseDataError({
|
|
653
|
-
data: toolCallDelta,
|
|
654
|
-
message: `Expected 'id' to be a string.`
|
|
655
|
-
});
|
|
656
|
-
}
|
|
657
|
-
if (((_a = toolCallDelta.function) == null ? void 0 : _a.name) == null) {
|
|
658
|
-
throw new InvalidResponseDataError({
|
|
659
|
-
data: toolCallDelta,
|
|
660
|
-
message: `Expected 'function.name' to be a string.`
|
|
661
|
-
});
|
|
662
|
-
}
|
|
663
|
-
controller.enqueue({
|
|
664
|
-
type: "tool-input-start",
|
|
665
|
-
id: toolCallDelta.id,
|
|
666
|
-
toolName: toolCallDelta.function.name
|
|
667
|
-
});
|
|
668
|
-
toolCalls[index] = {
|
|
669
|
-
id: toolCallDelta.id,
|
|
670
|
-
type: "function",
|
|
671
|
-
function: {
|
|
672
|
-
name: toolCallDelta.function.name,
|
|
673
|
-
arguments: (_b = toolCallDelta.function.arguments) != null ? _b : ""
|
|
674
|
-
},
|
|
675
|
-
hasFinished: false
|
|
676
|
-
};
|
|
677
|
-
const toolCall2 = toolCalls[index];
|
|
678
|
-
if (((_c = toolCall2.function) == null ? void 0 : _c.name) != null && ((_d = toolCall2.function) == null ? void 0 : _d.arguments) != null) {
|
|
679
|
-
if (toolCall2.function.arguments.length > 0) {
|
|
680
|
-
controller.enqueue({
|
|
681
|
-
type: "tool-input-delta",
|
|
682
|
-
id: toolCall2.id,
|
|
683
|
-
delta: toolCall2.function.arguments
|
|
684
|
-
});
|
|
685
|
-
}
|
|
686
|
-
if (isParsableJson(toolCall2.function.arguments)) {
|
|
687
|
-
controller.enqueue({
|
|
688
|
-
type: "tool-input-end",
|
|
689
|
-
id: toolCall2.id
|
|
690
|
-
});
|
|
691
|
-
controller.enqueue({
|
|
692
|
-
type: "tool-call",
|
|
693
|
-
toolCallId: (_e = toolCall2.id) != null ? _e : generateId(),
|
|
694
|
-
toolName: toolCall2.function.name,
|
|
695
|
-
input: toolCall2.function.arguments
|
|
696
|
-
});
|
|
697
|
-
toolCall2.hasFinished = true;
|
|
698
|
-
}
|
|
699
|
-
}
|
|
700
|
-
continue;
|
|
701
|
-
}
|
|
702
|
-
const toolCall = toolCalls[index];
|
|
703
|
-
if (toolCall.hasFinished) {
|
|
704
|
-
continue;
|
|
705
|
-
}
|
|
706
|
-
if (((_f = toolCallDelta.function) == null ? void 0 : _f.arguments) != null) {
|
|
707
|
-
toolCall.function.arguments += (_h = (_g = toolCallDelta.function) == null ? void 0 : _g.arguments) != null ? _h : "";
|
|
708
|
-
}
|
|
709
|
-
controller.enqueue({
|
|
710
|
-
type: "tool-input-delta",
|
|
711
|
-
id: toolCall.id,
|
|
712
|
-
delta: (_i = toolCallDelta.function.arguments) != null ? _i : ""
|
|
713
|
-
});
|
|
714
|
-
if (((_j = toolCall.function) == null ? void 0 : _j.name) != null && ((_k = toolCall.function) == null ? void 0 : _k.arguments) != null && isParsableJson(toolCall.function.arguments)) {
|
|
715
|
-
controller.enqueue({
|
|
716
|
-
type: "tool-input-end",
|
|
717
|
-
id: toolCall.id
|
|
718
|
-
});
|
|
719
|
-
controller.enqueue({
|
|
720
|
-
type: "tool-call",
|
|
721
|
-
toolCallId: (_l = toolCall.id) != null ? _l : generateId(),
|
|
722
|
-
toolName: toolCall.function.name,
|
|
723
|
-
input: toolCall.function.arguments
|
|
724
|
-
});
|
|
725
|
-
toolCall.hasFinished = true;
|
|
726
|
-
}
|
|
684
|
+
toolCallTracker.processDelta(toolCallDelta);
|
|
727
685
|
}
|
|
728
686
|
}
|
|
729
687
|
},
|
|
730
688
|
flush(controller) {
|
|
731
|
-
var
|
|
689
|
+
var _a2, _b2;
|
|
732
690
|
if (isActiveReasoning) {
|
|
733
691
|
controller.enqueue({ type: "reasoning-end", id: "reasoning-0" });
|
|
734
692
|
}
|
|
735
693
|
if (isActiveText) {
|
|
736
694
|
controller.enqueue({ type: "text-end", id: "txt-0" });
|
|
737
695
|
}
|
|
738
|
-
|
|
739
|
-
(toolCall2) => !toolCall2.hasFinished
|
|
740
|
-
)) {
|
|
741
|
-
controller.enqueue({
|
|
742
|
-
type: "tool-input-end",
|
|
743
|
-
id: toolCall.id
|
|
744
|
-
});
|
|
745
|
-
controller.enqueue({
|
|
746
|
-
type: "tool-call",
|
|
747
|
-
toolCallId: (_a = toolCall.id) != null ? _a : generateId(),
|
|
748
|
-
toolName: toolCall.function.name,
|
|
749
|
-
input: toolCall.function.arguments
|
|
750
|
-
});
|
|
751
|
-
}
|
|
696
|
+
toolCallTracker.flush();
|
|
752
697
|
controller.enqueue({
|
|
753
698
|
type: "finish",
|
|
754
699
|
finishReason,
|
|
755
700
|
usage: convertDeepSeekUsage(usage),
|
|
756
701
|
providerMetadata: {
|
|
757
702
|
[providerOptionsName]: {
|
|
758
|
-
promptCacheHitTokens: (
|
|
759
|
-
promptCacheMissTokens: (
|
|
703
|
+
promptCacheHitTokens: (_a2 = usage == null ? void 0 : usage.prompt_cache_hit_tokens) != null ? _a2 : void 0,
|
|
704
|
+
promptCacheMissTokens: (_b2 = usage == null ? void 0 : usage.prompt_cache_miss_tokens) != null ? _b2 : void 0
|
|
760
705
|
}
|
|
761
706
|
}
|
|
762
707
|
});
|
|
@@ -768,52 +713,8 @@ var DeepSeekChatLanguageModel = class {
|
|
|
768
713
|
};
|
|
769
714
|
}
|
|
770
715
|
};
|
|
771
|
-
|
|
772
|
-
// src/version.ts
|
|
773
|
-
var VERSION = true ? "3.0.0-beta.5" : "0.0.0-test";
|
|
774
|
-
|
|
775
|
-
// src/deepseek-provider.ts
|
|
776
|
-
function createDeepSeek(options = {}) {
|
|
777
|
-
var _a;
|
|
778
|
-
const baseURL = withoutTrailingSlash(
|
|
779
|
-
(_a = options.baseURL) != null ? _a : "https://api.deepseek.com"
|
|
780
|
-
);
|
|
781
|
-
const getHeaders = () => withUserAgentSuffix(
|
|
782
|
-
{
|
|
783
|
-
Authorization: `Bearer ${loadApiKey({
|
|
784
|
-
apiKey: options.apiKey,
|
|
785
|
-
environmentVariableName: "DEEPSEEK_API_KEY",
|
|
786
|
-
description: "DeepSeek API key"
|
|
787
|
-
})}`,
|
|
788
|
-
...options.headers
|
|
789
|
-
},
|
|
790
|
-
`ai-sdk/deepseek/${VERSION}`
|
|
791
|
-
);
|
|
792
|
-
const createLanguageModel = (modelId) => {
|
|
793
|
-
return new DeepSeekChatLanguageModel(modelId, {
|
|
794
|
-
provider: `deepseek.chat`,
|
|
795
|
-
url: ({ path }) => `${baseURL}${path}`,
|
|
796
|
-
headers: getHeaders,
|
|
797
|
-
fetch: options.fetch
|
|
798
|
-
});
|
|
799
|
-
};
|
|
800
|
-
const provider = (modelId) => createLanguageModel(modelId);
|
|
801
|
-
provider.specificationVersion = "v4";
|
|
802
|
-
provider.languageModel = createLanguageModel;
|
|
803
|
-
provider.chat = createLanguageModel;
|
|
804
|
-
provider.embeddingModel = (modelId) => {
|
|
805
|
-
throw new NoSuchModelError({ modelId, modelType: "embeddingModel" });
|
|
806
|
-
};
|
|
807
|
-
provider.textEmbeddingModel = provider.embeddingModel;
|
|
808
|
-
provider.imageModel = (modelId) => {
|
|
809
|
-
throw new NoSuchModelError({ modelId, modelType: "imageModel" });
|
|
810
|
-
};
|
|
811
|
-
return provider;
|
|
812
|
-
}
|
|
813
|
-
var deepseek = createDeepSeek();
|
|
814
716
|
export {
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
deepseek
|
|
717
|
+
DeepSeekChatLanguageModel,
|
|
718
|
+
deepseekLanguageModelChatOptions
|
|
818
719
|
};
|
|
819
|
-
//# sourceMappingURL=index.
|
|
720
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/chat/deepseek-chat-language-model.ts","../../src/chat/convert-to-deepseek-chat-messages.ts","../../src/chat/convert-to-deepseek-usage.ts","../../src/chat/deepseek-chat-api-types.ts","../../src/chat/deepseek-chat-language-model-options.ts","../../src/chat/deepseek-prepare-tools.ts","../../src/chat/get-response-metadata.ts","../../src/chat/map-deepseek-finish-reason.ts"],"sourcesContent":["import type {\n APICallError,\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4FinishReason,\n LanguageModelV4GenerateResult,\n LanguageModelV4StreamPart,\n LanguageModelV4StreamResult,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n generateId,\n isCustomReasoning,\n mapReasoningToProviderEffort,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n StreamingToolCallTracker,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n type InferSchema,\n type ParseResult,\n type ResponseHandler,\n} from '@ai-sdk/provider-utils';\nimport { convertToDeepSeekChatMessages } from './convert-to-deepseek-chat-messages';\nimport { convertDeepSeekUsage } from './convert-to-deepseek-usage';\nimport {\n deepseekChatChunkSchema,\n deepseekChatResponseSchema,\n deepSeekErrorSchema,\n type DeepSeekChatTokenUsage,\n} from './deepseek-chat-api-types';\nimport {\n deepseekLanguageModelChatOptions,\n type DeepSeekChatModelId,\n} from './deepseek-chat-language-model-options';\nimport { prepareTools } from './deepseek-prepare-tools';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { mapDeepSeekFinishReason } from './map-deepseek-finish-reason';\n\nexport type DeepSeekChatConfig = {\n provider: string;\n headers?: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: FetchFunction;\n supportsThinking?: boolean;\n};\n\nexport class DeepSeekChatLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n\n readonly modelId: DeepSeekChatModelId;\n readonly supportedUrls = {};\n\n private readonly config: DeepSeekChatConfig;\n private readonly failedResponseHandler: ResponseHandler<APICallError>;\n\n static [WORKFLOW_SERIALIZE](model: DeepSeekChatLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: DeepSeekChatModelId;\n config: DeepSeekChatConfig;\n }) {\n return new DeepSeekChatLanguageModel(options.modelId, options.config);\n }\n\n constructor(modelId: DeepSeekChatModelId, config: DeepSeekChatConfig) {\n this.modelId = modelId;\n this.config = config;\n\n this.failedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: deepSeekErrorSchema,\n errorToMessage: (error: InferSchema<typeof deepSeekErrorSchema>) =>\n error.error.message,\n });\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n private get providerOptionsName(): string {\n return this.config.provider.split('.')[0].trim();\n }\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n reasoning,\n providerOptions,\n stopSequences,\n responseFormat,\n seed,\n toolChoice,\n tools,\n }: LanguageModelV4CallOptions) {\n const deepseekOptions =\n (await parseProviderOptions({\n provider: this.providerOptionsName,\n providerOptions,\n schema: deepseekLanguageModelChatOptions,\n })) ?? {};\n\n const { messages, warnings } = convertToDeepSeekChatMessages({\n prompt,\n responseFormat,\n modelId: this.modelId,\n });\n const allWarnings: SharedV4Warning[] = [...warnings];\n\n if (topK != null) {\n allWarnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n if (seed != null) {\n allWarnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n const {\n tools: deepseekTools,\n toolChoice: deepseekToolChoices,\n toolWarnings,\n } = prepareTools({\n tools,\n toolChoice,\n });\n\n const thinking =\n this.config.supportsThinking === false\n ? undefined\n : deepseekOptions.thinking?.type != null\n ? { type: deepseekOptions.thinking.type }\n : isCustomReasoning(reasoning)\n ? { type: reasoning === 'none' ? 'disabled' : 'enabled' }\n : undefined;\n\n const reasoningEffort =\n deepseekOptions.reasoningEffort ??\n (isCustomReasoning(reasoning) && reasoning !== 'none'\n ? mapReasoningToProviderEffort({\n reasoning,\n effortMap: {\n minimal: 'low',\n low: 'low',\n medium: 'medium',\n high: 'high',\n xhigh: 'max',\n },\n warnings: allWarnings,\n })\n : undefined);\n\n return {\n args: {\n model: this.modelId,\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n response_format:\n responseFormat?.type === 'json' ? { type: 'json_object' } : undefined,\n stop: stopSequences,\n messages,\n tools: deepseekTools,\n tool_choice: deepseekToolChoices,\n thinking,\n ...(thinking?.type !== 'disabled' &&\n reasoningEffort != null && {\n reasoning_effort: reasoningEffort,\n }),\n },\n warnings: [...allWarnings, ...toolWarnings],\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args, warnings } = await this.getArgs({ ...options });\n\n const {\n responseHeaders,\n value: responseBody,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: args,\n failedResponseHandler: this.failedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n deepseekChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = responseBody.choices[0];\n const content: Array<LanguageModelV4Content> = [];\n\n // reasoning content (before text):\n const reasoning = choice.message.reasoning_content;\n if (reasoning != null && reasoning.length > 0) {\n content.push({\n type: 'reasoning',\n text: reasoning,\n });\n }\n\n // tool calls:\n if (choice.message.tool_calls != null) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments!,\n });\n }\n }\n\n // text content:\n const text = choice.message.content;\n if (text != null && text.length > 0) {\n content.push({ type: 'text', text });\n }\n\n return {\n content,\n finishReason: {\n unified: mapDeepSeekFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: convertDeepSeekUsage(responseBody.usage),\n providerMetadata: {\n [this.providerOptionsName]: {\n promptCacheHitTokens: responseBody.usage?.prompt_cache_hit_tokens,\n promptCacheMissTokens: responseBody.usage?.prompt_cache_miss_tokens,\n },\n },\n request: { body: args },\n response: {\n ...getResponseMetadata(responseBody),\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings } = await this.getArgs({ ...options });\n\n const body = {\n ...args,\n stream: true,\n stream_options: { include_usage: true },\n };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body,\n failedResponseHandler: this.failedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n deepseekChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let toolCallTracker: StreamingToolCallTracker;\n\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: DeepSeekChatTokenUsage | undefined = undefined;\n let isFirstChunk = true;\n const providerOptionsName = this.providerOptionsName;\n let isActiveReasoning = false;\n let isActiveText = false;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<InferSchema<typeof deepseekChatChunkSchema>>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n toolCallTracker = new StreamingToolCallTracker(controller, {\n generateId,\n });\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n // Emit raw chunk if requested (before anything else)\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n const value = chunk.value;\n\n // handle error chunks:\n if ('error' in value) {\n finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({ type: 'error', error: value.error.message });\n return;\n }\n\n if (isFirstChunk) {\n isFirstChunk = false;\n\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value),\n });\n }\n\n if (value.usage != null) {\n usage = value.usage;\n }\n\n const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = {\n unified: mapDeepSeekFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n\n // enqueue reasoning before text deltas:\n const reasoningContent = delta.reasoning_content;\n if (reasoningContent) {\n if (!isActiveReasoning) {\n controller.enqueue({\n type: 'reasoning-start',\n id: 'reasoning-0',\n });\n isActiveReasoning = true;\n }\n\n controller.enqueue({\n type: 'reasoning-delta',\n id: 'reasoning-0',\n delta: reasoningContent,\n });\n }\n\n if (delta.content) {\n if (!isActiveText) {\n controller.enqueue({ type: 'text-start', id: 'txt-0' });\n isActiveText = true;\n }\n\n // end reasoning when text starts:\n if (isActiveReasoning) {\n controller.enqueue({\n type: 'reasoning-end',\n id: 'reasoning-0',\n });\n isActiveReasoning = false;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: 'txt-0',\n delta: delta.content,\n });\n }\n\n if (delta.tool_calls != null) {\n // end reasoning when tool calls start:\n if (isActiveReasoning) {\n controller.enqueue({\n type: 'reasoning-end',\n id: 'reasoning-0',\n });\n isActiveReasoning = false;\n }\n\n for (const toolCallDelta of delta.tool_calls) {\n toolCallTracker.processDelta(toolCallDelta);\n }\n }\n },\n\n flush(controller) {\n if (isActiveReasoning) {\n controller.enqueue({ type: 'reasoning-end', id: 'reasoning-0' });\n }\n\n if (isActiveText) {\n controller.enqueue({ type: 'text-end', id: 'txt-0' });\n }\n\n toolCallTracker.flush();\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertDeepSeekUsage(usage),\n providerMetadata: {\n [providerOptionsName]: {\n promptCacheHitTokens:\n usage?.prompt_cache_hit_tokens ?? undefined,\n promptCacheMissTokens:\n usage?.prompt_cache_miss_tokens ?? undefined,\n },\n },\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n","import type {\n LanguageModelV4CallOptions,\n LanguageModelV4Prompt,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { DeepSeekChatPrompt } from './deepseek-chat-api-types';\n\nexport function convertToDeepSeekChatMessages({\n prompt,\n responseFormat,\n modelId,\n}: {\n prompt: LanguageModelV4Prompt;\n responseFormat: LanguageModelV4CallOptions['responseFormat'];\n modelId: string;\n}): {\n messages: DeepSeekChatPrompt;\n warnings: Array<SharedV4Warning>;\n} {\n const isDeepSeekV4 = modelId.includes('deepseek-v4');\n const messages: DeepSeekChatPrompt = [];\n const warnings: Array<SharedV4Warning> = [];\n\n // Inject system message if response format is JSON\n if (responseFormat?.type === 'json') {\n if (responseFormat.schema == null) {\n messages.push({\n role: 'system',\n content: 'Return JSON.',\n });\n } else {\n messages.push({\n role: 'system',\n content:\n 'Return JSON that conforms to the following schema: ' +\n JSON.stringify(responseFormat.schema),\n });\n warnings.push({\n type: 'compatibility',\n feature: 'responseFormat JSON schema',\n details: 'JSON response schema is injected into the system message.',\n });\n }\n }\n\n // TODO use findLastIndex once we use ES2023\n let lastUserMessageIndex = -1;\n for (let i = prompt.length - 1; i >= 0; i--) {\n if (prompt[i].role === 'user') {\n lastUserMessageIndex = i;\n break;\n }\n }\n\n let index = -1;\n for (const { role, content } of prompt) {\n index++;\n\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user': {\n let userContent = '';\n for (const part of content) {\n if (part.type === 'text') {\n userContent += part.text;\n } else {\n warnings.push({\n type: 'unsupported',\n feature: `user message part type: ${part.type}`,\n });\n }\n }\n\n messages.push({\n role: 'user',\n content: userContent,\n });\n\n break;\n }\n case 'assistant': {\n let text = '';\n let reasoning: string | undefined;\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'reasoning': {\n // R1 must not receive prior reasoning; V4 requires it.\n if (index <= lastUserMessageIndex && !isDeepSeekV4) {\n break;\n }\n\n if (reasoning == null) {\n reasoning = part.text;\n } else {\n reasoning += part.text;\n }\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n }\n }\n\n // V4 demands the field on every assistant turn — back-fill an empty\n // string when the source message had no reasoning part at all.\n messages.push({\n role: 'assistant',\n content: text,\n reasoning_content: reasoning ?? (isDeepSeekV4 ? '' : undefined),\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-approval-response') {\n continue;\n }\n const output = toolResponse.output;\n\n let contentValue: string;\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool call execution denied.';\n break;\n case 'content':\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n }\n\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: contentValue,\n });\n }\n break;\n }\n\n default: {\n warnings.push({\n type: 'unsupported',\n feature: `message role: ${role}`,\n });\n break;\n }\n }\n }\n\n return { messages, warnings };\n}\n","import type { LanguageModelV4Usage } from '@ai-sdk/provider';\n\nexport function convertDeepSeekUsage(\n usage:\n | {\n prompt_tokens?: number | null | undefined;\n completion_tokens?: number | null | undefined;\n prompt_cache_hit_tokens?: number | null | undefined;\n completion_tokens_details?:\n | {\n reasoning_tokens?: number | null | undefined;\n }\n | null\n | undefined;\n }\n | undefined\n | null,\n): LanguageModelV4Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n };\n }\n\n const promptTokens = usage.prompt_tokens ?? 0;\n const completionTokens = usage.completion_tokens ?? 0;\n const cacheReadTokens = usage.prompt_cache_hit_tokens ?? 0;\n const reasoningTokens =\n usage.completion_tokens_details?.reasoning_tokens ?? 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens,\n },\n raw: usage,\n };\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type DeepSeekChatPrompt = Array<DeepSeekMessage>;\n\nexport type DeepSeekMessage =\n | DeepSeekSystemMessage\n | DeepSeekUserMessage\n | DeepSeekAssistantMessage\n | DeepSeekToolMessage;\n\nexport interface DeepSeekSystemMessage {\n role: 'system';\n content: string;\n}\n\nexport interface DeepSeekUserMessage {\n role: 'user';\n content: string;\n}\n\nexport interface DeepSeekAssistantMessage {\n role: 'assistant';\n content?: string | null;\n reasoning_content?: string;\n tool_calls?: Array<DeepSeekMessageToolCall>;\n}\n\nexport interface DeepSeekMessageToolCall {\n type: 'function';\n id: string;\n function: {\n arguments: string;\n name: string;\n };\n}\n\nexport interface DeepSeekToolMessage {\n role: 'tool';\n content: string;\n tool_call_id: string;\n}\n\nexport interface DeepSeekFunctionTool {\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n}\n\nexport type DeepSeekToolChoice =\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n\nconst tokenUsageSchema = z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n prompt_cache_hit_tokens: z.number().nullish(),\n prompt_cache_miss_tokens: z.number().nullish(),\n total_tokens: z.number().nullish(),\n completion_tokens_details: z\n .object({\n reasoning_tokens: z.number().nullish(),\n })\n .nullish(),\n })\n .nullish();\n\nexport type DeepSeekChatTokenUsage = z.infer<typeof tokenUsageSchema>;\n\nexport const deepSeekErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.any().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type DeepSeekErrorData = z.infer<typeof deepSeekErrorSchema>;\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nexport const deepseekChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant').nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().nullish(),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: tokenUsageSchema,\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nexport const deepseekChatChunkSchema = lazySchema(() =>\n zodSchema(\n z.union([\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z\n .object({\n role: z.enum(['assistant']).nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: tokenUsageSchema,\n }),\n deepSeekErrorSchema,\n ]),\n ),\n);\n","import { z } from 'zod/v4';\n\n// https://api-docs.deepseek.com/quick_start/pricing\nexport type DeepSeekChatModelId =\n | 'deepseek-chat'\n | 'deepseek-reasoner'\n | (string & {});\n\nexport const deepseekLanguageModelChatOptions = z.object({\n /**\n * Type of thinking to use. Defaults to `enabled`.\n *\n * See https://api-docs.deepseek.com/guides/thinking_mode for the\n * `adaptive` option, which lets the model decide when to think.\n */\n thinking: z\n .object({\n type: z.enum(['adaptive', 'enabled', 'disabled']).optional(),\n })\n .optional(),\n\n /**\n * Controls the thinking strength for DeepSeek V4 reasoning models.\n *\n * DeepSeek's API accepts `low`, `medium`, `high`, `xhigh`, and `max`.\n * Per their docs, `low` and `medium` are mapped to `high`, and `xhigh`\n * is mapped to `max` server-side for compatibility with other providers.\n */\n reasoningEffort: z.enum(['low', 'medium', 'high', 'xhigh', 'max']).optional(),\n});\n\nexport type DeepSeekLanguageModelChatOptions = z.infer<\n typeof deepseekLanguageModelChatOptions\n>;\n","import type {\n LanguageModelV4CallOptions,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type {\n DeepSeekFunctionTool,\n DeepSeekToolChoice,\n} from './deepseek-chat-api-types';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n toolChoice?: LanguageModelV4CallOptions['toolChoice'];\n}): {\n tools: undefined | Array<DeepSeekFunctionTool>;\n toolChoice: DeepSeekToolChoice;\n toolWarnings: SharedV4Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV4Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const deepseekTools: Array<DeepSeekFunctionTool> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else {\n deepseekTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: deepseekTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice?.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: deepseekTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: deepseekTools,\n toolChoice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n return {\n tools: deepseekTools,\n toolChoice: undefined,\n toolWarnings: [\n ...toolWarnings,\n {\n type: 'unsupported',\n feature: `tool choice type: ${type}`,\n },\n ],\n };\n }\n }\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import type { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapDeepSeekFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV4FinishReason['unified'] {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n case 'tool_calls':\n return 'tool-calls';\n case 'insufficient_system_resource':\n return 'error';\n default:\n return 'other';\n }\n}\n"],"mappings":"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","names":["z","_a","_b"]}
|