Skip to content

Commit 0b4a088

Browse files
committed
fix(playground/server): patch ai-sdk deepseek provider for deepseek-v4-flash/pro
1 parent 1675d12 commit 0b4a088

4 files changed

Lines changed: 165 additions & 44 deletions

File tree

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
},
2424
"pnpm": {
2525
"patchedDependencies": {
26-
"ai@6.0.116": "patches/ai@6.0.116.patch"
26+
"ai@6.0.116": "patches/ai@6.0.116.patch",
27+
"@ai-sdk/deepseek@1.0.7": "patches/@ai-sdk__deepseek@1.0.7.patch",
28+
"@ai-sdk/openai-compatible@1.0.7": "patches/@ai-sdk__openai-compatible@1.0.7.patch"
2729
}
2830
},
2931
"keywords": [],
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
diff --git a/dist/index.js b/dist/index.js
2+
index 0309759e178fbf74e5e1d824cdb45bc76defcbd3..ffd995d87ddb1c41bfcdddaac4b3700dfacbd76d 100644
3+
--- a/dist/index.js
4+
+++ b/dist/index.js
5+
@@ -103,7 +103,8 @@ function createDeepSeek(options = {}) {
6+
url: ({ path }) => `${baseURL}${path}`,
7+
headers: getHeaders,
8+
fetch: options.fetch,
9+
- metadataExtractor: deepSeekMetadataExtractor
10+
+ metadataExtractor: deepSeekMetadataExtractor,
11+
+ keepReasoning: modelId.includes("deepseek/deepseek-v4"),
12+
});
13+
};
14+
const provider = (modelId) => createLanguageModel(modelId);
15+
diff --git a/dist/index.mjs b/dist/index.mjs
16+
index 8aba38f24dbc0eee2f53a0b152f5ca082e3993bd..8e6a61050634dc3a761ee1b6e51dfa5f67f4de4b 100644
17+
--- a/dist/index.mjs
18+
+++ b/dist/index.mjs
19+
@@ -81,7 +81,8 @@ function createDeepSeek(options = {}) {
20+
url: ({ path }) => `${baseURL}${path}`,
21+
headers: getHeaders,
22+
fetch: options.fetch,
23+
- metadataExtractor: deepSeekMetadataExtractor
24+
+ metadataExtractor: deepSeekMetadataExtractor,
25+
+ keepReasoning: modelId.includes("deepseek/deepseek-v4"),
26+
});
27+
};
28+
const provider = (modelId) => createLanguageModel(modelId);
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
diff --git a/dist/index.js b/dist/index.js
2+
index d03e3cf341bc7ecaee2d6daaaf8473c8f5e3a571..f8965432998b83e7bf8e9347c40f32f07a8d2995 100644
3+
--- a/dist/index.js
4+
+++ b/dist/index.js
5+
@@ -40,7 +40,7 @@ function getOpenAIMetadata(message) {
6+
var _a, _b;
7+
return (_b = (_a = message == null ? void 0 : message.providerOptions) == null ? void 0 : _a.openaiCompatible) != null ? _b : {};
8+
}
9+
-function convertToOpenAICompatibleChatMessages(prompt) {
10+
+function convertToOpenAICompatibleChatMessages(prompt, keepReasoning = false) {
11+
const messages = [];
12+
for (const { role, content, ...message } of prompt) {
13+
const metadata = getOpenAIMetadata({ ...message });
14+
@@ -90,6 +90,7 @@ function convertToOpenAICompatibleChatMessages(prompt) {
15+
}
16+
case "assistant": {
17+
let text = "";
18+
+ let reasoning = "";
19+
const toolCalls = [];
20+
for (const part of content) {
21+
const partMetadata = getOpenAIMetadata(part);
22+
@@ -110,11 +111,19 @@ function convertToOpenAICompatibleChatMessages(prompt) {
23+
});
24+
break;
25+
}
26+
+ case "reasoning": {
27+
+ if (!keepReasoning) {
28+
+ break;
29+
+ }
30+
+ reasoning += part.text;
31+
+ break;
32+
+ }
33+
}
34+
}
35+
messages.push({
36+
role: "assistant",
37+
content: text,
38+
+ reasoning_content: keepReasoning ? reasoning : void 0,
39+
tool_calls: toolCalls.length > 0 ? toolCalls : void 0,
40+
...metadata
41+
});
42+
@@ -290,6 +299,9 @@ var OpenAICompatibleChatLanguageModel = class {
43+
get providerOptionsName() {
44+
return this.config.provider.split(".")[0].trim();
45+
}
46+
+ get keepReasoning() {
47+
+ return this.config.keepReasoning ?? false;
48+
+ }
49+
get supportedUrls() {
50+
var _a, _b, _c;
51+
return (_c = (_b = (_a = this.config).supportedUrls) == null ? void 0 : _b.call(_a)) != null ? _c : {};
52+
@@ -366,7 +378,7 @@ var OpenAICompatibleChatLanguageModel = class {
53+
...providerOptions == null ? void 0 : providerOptions[this.providerOptionsName],
54+
reasoning_effort: compatibleOptions.reasoningEffort,
55+
// messages:
56+
- messages: convertToOpenAICompatibleChatMessages(prompt),
57+
+ messages: convertToOpenAICompatibleChatMessages(prompt, this.keepReasoning),
58+
// tools:
59+
tools: openaiTools,
60+
tool_choice: openaiToolChoice
61+
diff --git a/dist/index.mjs b/dist/index.mjs
62+
index 3c853f2c18ec38bee12340cc3d3303077ea743a7..5842b4aaba6bd3ca22695c54187a9c318cfc132b 100644
63+
--- a/dist/index.mjs
64+
+++ b/dist/index.mjs
65+
@@ -23,7 +23,7 @@ function getOpenAIMetadata(message) {
66+
var _a, _b;
67+
return (_b = (_a = message == null ? void 0 : message.providerOptions) == null ? void 0 : _a.openaiCompatible) != null ? _b : {};
68+
}
69+
-function convertToOpenAICompatibleChatMessages(prompt) {
70+
+function convertToOpenAICompatibleChatMessages(prompt, keepReasoning = false) {
71+
const messages = [];
72+
for (const { role, content, ...message } of prompt) {
73+
const metadata = getOpenAIMetadata({ ...message });
74+
@@ -73,6 +73,7 @@ function convertToOpenAICompatibleChatMessages(prompt) {
75+
}
76+
case "assistant": {
77+
let text = "";
78+
+ let reasoning = "";
79+
const toolCalls = [];
80+
for (const part of content) {
81+
const partMetadata = getOpenAIMetadata(part);
82+
@@ -93,11 +94,19 @@ function convertToOpenAICompatibleChatMessages(prompt) {
83+
});
84+
break;
85+
}
86+
+ case "reasoning": {
87+
+ if (!keepReasoning) {
88+
+ break;
89+
+ }
90+
+ reasoning += part.text;
91+
+ break;
92+
+ }
93+
}
94+
}
95+
messages.push({
96+
role: "assistant",
97+
content: text,
98+
+ reasoning_content: keepReasoning ? reasoning : void 0,
99+
tool_calls: toolCalls.length > 0 ? toolCalls : void 0,
100+
...metadata
101+
});
102+
@@ -275,6 +284,9 @@ var OpenAICompatibleChatLanguageModel = class {
103+
get providerOptionsName() {
104+
return this.config.provider.split(".")[0].trim();
105+
}
106+
+ get keepReasoning() {
107+
+ return this.config.keepReasoning ?? false;
108+
+ }
109+
get supportedUrls() {
110+
var _a, _b, _c;
111+
return (_c = (_b = (_a = this.config).supportedUrls) == null ? void 0 : _b.call(_a)) != null ? _c : {};
112+
@@ -351,7 +363,7 @@ var OpenAICompatibleChatLanguageModel = class {
113+
...providerOptions == null ? void 0 : providerOptions[this.providerOptionsName],
114+
reasoning_effort: compatibleOptions.reasoningEffort,
115+
// messages:
116+
- messages: convertToOpenAICompatibleChatMessages(prompt),
117+
+ messages: convertToOpenAICompatibleChatMessages(prompt, this.keepReasoning),
118+
// tools:
119+
tools: openaiTools,
120+
tool_choice: openaiToolChoice

0 commit comments

Comments
 (0)