@chatluna/v1-shared-adapter 1.0.18 → 1.0.19
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/lib/index.cjs +67 -38
- package/lib/index.mjs +64 -37
- package/lib/utils.d.ts +2 -0
- package/package.json +2 -2
package/lib/index.cjs
CHANGED
|
@@ -36,11 +36,13 @@ __export(index_exports, {
|
|
|
36
36
|
isNonLLMModel: () => isNonLLMModel,
|
|
37
37
|
langchainMessageToOpenAIMessage: () => langchainMessageToOpenAIMessage,
|
|
38
38
|
messageTypeToOpenAIRole: () => messageTypeToOpenAIRole,
|
|
39
|
+
processDeepSeekThinkMessages: () => processDeepSeekThinkMessages,
|
|
39
40
|
processReasoningContent: () => processReasoningContent,
|
|
40
41
|
processResponse: () => processResponse,
|
|
41
42
|
processStreamResponse: () => processStreamResponse,
|
|
42
43
|
removeAdditionalProperties: () => removeAdditionalProperties,
|
|
43
|
-
supportImageInput: () => supportImageInput
|
|
44
|
+
supportImageInput: () => supportImageInput,
|
|
45
|
+
transformSystemMessages: () => transformSystemMessages
|
|
44
46
|
});
|
|
45
47
|
module.exports = __toCommonJS(index_exports);
|
|
46
48
|
|
|
@@ -143,6 +145,7 @@ var import_string = require("koishi-plugin-chatluna/utils/string");
|
|
|
143
145
|
var import_types = require("@langchain/core/utils/types");
|
|
144
146
|
async function langchainMessageToOpenAIMessage(messages, plugin, model, supportImageInput2, removeSystemMessage) {
|
|
145
147
|
const result = [];
|
|
148
|
+
const isDeepseekThinkModel = model?.includes("deepseek-reasoner");
|
|
146
149
|
for (const rawMessage of messages) {
|
|
147
150
|
const role = messageTypeToOpenAIRole(rawMessage.getType());
|
|
148
151
|
const msg = {
|
|
@@ -211,48 +214,72 @@ async function langchainMessageToOpenAIMessage(messages, plugin, model, supportI
|
|
|
211
214
|
result.push(msg);
|
|
212
215
|
}
|
|
213
216
|
if (removeSystemMessage) {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
role: "user",
|
|
235
|
-
content: "Continue what I said to you last message. Follow these instructions."
|
|
236
|
-
});
|
|
217
|
+
return transformSystemMessages(result);
|
|
218
|
+
}
|
|
219
|
+
if (isDeepseekThinkModel) {
|
|
220
|
+
return processDeepSeekThinkMessages(result, messages);
|
|
221
|
+
}
|
|
222
|
+
return result;
|
|
223
|
+
}
|
|
224
|
+
__name(langchainMessageToOpenAIMessage, "langchainMessageToOpenAIMessage");
|
|
225
|
+
function processDeepSeekThinkMessages(convertedMessages, originalMessages) {
|
|
226
|
+
if (originalMessages.length === 0) {
|
|
227
|
+
return convertedMessages;
|
|
228
|
+
}
|
|
229
|
+
let lastTurnStartIndex = -1;
|
|
230
|
+
for (let i = originalMessages.length - 1; i >= 0; i--) {
|
|
231
|
+
const message = originalMessages[i];
|
|
232
|
+
if (message.getType() === "ai") {
|
|
233
|
+
const aiMessage = message;
|
|
234
|
+
if (!aiMessage.tool_calls || aiMessage.tool_calls.length === 0) {
|
|
235
|
+
lastTurnStartIndex = i;
|
|
236
|
+
break;
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
239
|
+
}
|
|
240
|
+
if (lastTurnStartIndex === -1) {
|
|
241
|
+
return convertedMessages;
|
|
242
|
+
}
|
|
243
|
+
return convertedMessages.map((message, index) => {
|
|
244
|
+
if (index >= lastTurnStartIndex) {
|
|
245
|
+
const originalMessage = originalMessages[index];
|
|
246
|
+
const reasoningContent = originalMessage?.additional_kwargs?.reasoning_content;
|
|
247
|
+
if (reasoningContent) {
|
|
248
|
+
return {
|
|
249
|
+
...message,
|
|
250
|
+
reasoning_content: reasoningContent
|
|
251
|
+
};
|
|
252
|
+
}
|
|
244
253
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
254
|
+
return message;
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
__name(processDeepSeekThinkMessages, "processDeepSeekThinkMessages");
|
|
258
|
+
function transformSystemMessages(messages) {
|
|
259
|
+
const mappedMessage = [];
|
|
260
|
+
for (let i = 0; i < messages.length; i++) {
|
|
261
|
+
const message = messages[i];
|
|
262
|
+
if (message.role !== "system") {
|
|
263
|
+
mappedMessage.push(message);
|
|
264
|
+
continue;
|
|
250
265
|
}
|
|
251
|
-
|
|
266
|
+
continue;
|
|
252
267
|
}
|
|
253
|
-
|
|
268
|
+
if (mappedMessage[mappedMessage.length - 1]?.role === "assistant") {
|
|
269
|
+
mappedMessage.push({
|
|
270
|
+
role: "user",
|
|
271
|
+
content: "Continue what I said to you last message. Follow these instructions."
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
if (mappedMessage[0]?.role === "assistant") {
|
|
275
|
+
mappedMessage.unshift({
|
|
276
|
+
role: "user",
|
|
277
|
+
content: "Continue what I said to you last time. Follow these instructions."
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
return mappedMessage;
|
|
254
281
|
}
|
|
255
|
-
__name(
|
|
282
|
+
__name(transformSystemMessages, "transformSystemMessages");
|
|
256
283
|
async function fetchImageUrl(plugin, content) {
|
|
257
284
|
const url = typeof content.image_url === "string" ? content.image_url : content.image_url.url;
|
|
258
285
|
if (url.includes("data:image") && url.includes("base64")) {
|
|
@@ -744,9 +771,11 @@ __name(createRequestContext, "createRequestContext");
|
|
|
744
771
|
isNonLLMModel,
|
|
745
772
|
langchainMessageToOpenAIMessage,
|
|
746
773
|
messageTypeToOpenAIRole,
|
|
774
|
+
processDeepSeekThinkMessages,
|
|
747
775
|
processReasoningContent,
|
|
748
776
|
processResponse,
|
|
749
777
|
processStreamResponse,
|
|
750
778
|
removeAdditionalProperties,
|
|
751
|
-
supportImageInput
|
|
779
|
+
supportImageInput,
|
|
780
|
+
transformSystemMessages
|
|
752
781
|
});
|
package/lib/index.mjs
CHANGED
|
@@ -113,6 +113,7 @@ import {
|
|
|
113
113
|
import { isZodSchemaV3 } from "@langchain/core/utils/types";
|
|
114
114
|
async function langchainMessageToOpenAIMessage(messages, plugin, model, supportImageInput2, removeSystemMessage) {
|
|
115
115
|
const result = [];
|
|
116
|
+
const isDeepseekThinkModel = model?.includes("deepseek-reasoner");
|
|
116
117
|
for (const rawMessage of messages) {
|
|
117
118
|
const role = messageTypeToOpenAIRole(rawMessage.getType());
|
|
118
119
|
const msg = {
|
|
@@ -181,48 +182,72 @@ async function langchainMessageToOpenAIMessage(messages, plugin, model, supportI
|
|
|
181
182
|
result.push(msg);
|
|
182
183
|
}
|
|
183
184
|
if (removeSystemMessage) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
role: "user",
|
|
205
|
-
content: "Continue what I said to you last message. Follow these instructions."
|
|
206
|
-
});
|
|
185
|
+
return transformSystemMessages(result);
|
|
186
|
+
}
|
|
187
|
+
if (isDeepseekThinkModel) {
|
|
188
|
+
return processDeepSeekThinkMessages(result, messages);
|
|
189
|
+
}
|
|
190
|
+
return result;
|
|
191
|
+
}
|
|
192
|
+
__name(langchainMessageToOpenAIMessage, "langchainMessageToOpenAIMessage");
|
|
193
|
+
function processDeepSeekThinkMessages(convertedMessages, originalMessages) {
|
|
194
|
+
if (originalMessages.length === 0) {
|
|
195
|
+
return convertedMessages;
|
|
196
|
+
}
|
|
197
|
+
let lastTurnStartIndex = -1;
|
|
198
|
+
for (let i = originalMessages.length - 1; i >= 0; i--) {
|
|
199
|
+
const message = originalMessages[i];
|
|
200
|
+
if (message.getType() === "ai") {
|
|
201
|
+
const aiMessage = message;
|
|
202
|
+
if (!aiMessage.tool_calls || aiMessage.tool_calls.length === 0) {
|
|
203
|
+
lastTurnStartIndex = i;
|
|
204
|
+
break;
|
|
207
205
|
}
|
|
208
206
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
207
|
+
}
|
|
208
|
+
if (lastTurnStartIndex === -1) {
|
|
209
|
+
return convertedMessages;
|
|
210
|
+
}
|
|
211
|
+
return convertedMessages.map((message, index) => {
|
|
212
|
+
if (index >= lastTurnStartIndex) {
|
|
213
|
+
const originalMessage = originalMessages[index];
|
|
214
|
+
const reasoningContent = originalMessage?.additional_kwargs?.reasoning_content;
|
|
215
|
+
if (reasoningContent) {
|
|
216
|
+
return {
|
|
217
|
+
...message,
|
|
218
|
+
reasoning_content: reasoningContent
|
|
219
|
+
};
|
|
220
|
+
}
|
|
214
221
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
222
|
+
return message;
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
__name(processDeepSeekThinkMessages, "processDeepSeekThinkMessages");
|
|
226
|
+
function transformSystemMessages(messages) {
|
|
227
|
+
const mappedMessage = [];
|
|
228
|
+
for (let i = 0; i < messages.length; i++) {
|
|
229
|
+
const message = messages[i];
|
|
230
|
+
if (message.role !== "system") {
|
|
231
|
+
mappedMessage.push(message);
|
|
232
|
+
continue;
|
|
220
233
|
}
|
|
221
|
-
|
|
234
|
+
continue;
|
|
222
235
|
}
|
|
223
|
-
|
|
236
|
+
if (mappedMessage[mappedMessage.length - 1]?.role === "assistant") {
|
|
237
|
+
mappedMessage.push({
|
|
238
|
+
role: "user",
|
|
239
|
+
content: "Continue what I said to you last message. Follow these instructions."
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
if (mappedMessage[0]?.role === "assistant") {
|
|
243
|
+
mappedMessage.unshift({
|
|
244
|
+
role: "user",
|
|
245
|
+
content: "Continue what I said to you last time. Follow these instructions."
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
return mappedMessage;
|
|
224
249
|
}
|
|
225
|
-
__name(
|
|
250
|
+
__name(transformSystemMessages, "transformSystemMessages");
|
|
226
251
|
async function fetchImageUrl(plugin, content) {
|
|
227
252
|
const url = typeof content.image_url === "string" ? content.image_url : content.image_url.url;
|
|
228
253
|
if (url.includes("data:image") && url.includes("base64")) {
|
|
@@ -713,9 +738,11 @@ export {
|
|
|
713
738
|
isNonLLMModel,
|
|
714
739
|
langchainMessageToOpenAIMessage,
|
|
715
740
|
messageTypeToOpenAIRole,
|
|
741
|
+
processDeepSeekThinkMessages,
|
|
716
742
|
processReasoningContent,
|
|
717
743
|
processResponse,
|
|
718
744
|
processStreamResponse,
|
|
719
745
|
removeAdditionalProperties,
|
|
720
|
-
supportImageInput
|
|
746
|
+
supportImageInput,
|
|
747
|
+
transformSystemMessages
|
|
721
748
|
};
|
package/lib/utils.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ import { JsonSchema7Type } from 'zod-to-json-schema';
|
|
|
4
4
|
import { ChatCompletionResponseMessage, ChatCompletionResponseMessageRoleEnum, ChatCompletionTool } from './types';
|
|
5
5
|
import { ChatLunaPlugin } from 'koishi-plugin-chatluna/services/chat';
|
|
6
6
|
export declare function langchainMessageToOpenAIMessage(messages: BaseMessage[], plugin: ChatLunaPlugin, model?: string, supportImageInput?: boolean, removeSystemMessage?: boolean): Promise<ChatCompletionResponseMessage[]>;
|
|
7
|
+
export declare function processDeepSeekThinkMessages(convertedMessages: ChatCompletionResponseMessage[], originalMessages: BaseMessage[]): ChatCompletionResponseMessage[];
|
|
8
|
+
export declare function transformSystemMessages(messages: ChatCompletionResponseMessage[]): ChatCompletionResponseMessage[];
|
|
7
9
|
export declare function fetchImageUrl(plugin: ChatLunaPlugin, content: MessageContentImageUrl): Promise<string>;
|
|
8
10
|
export declare function messageTypeToOpenAIRole(type: MessageType): ChatCompletionResponseMessageRoleEnum;
|
|
9
11
|
export declare function formatToolsToOpenAITools(tools: StructuredTool[], includeGoogleSearch: boolean): ChatCompletionTool[];
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chatluna/v1-shared-adapter",
|
|
3
3
|
"description": "chatluna shared adapter",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.19",
|
|
5
5
|
"main": "lib/index.cjs",
|
|
6
6
|
"module": "lib/index.mjs",
|
|
7
7
|
"typings": "lib/index.d.ts",
|
|
@@ -70,6 +70,6 @@
|
|
|
70
70
|
},
|
|
71
71
|
"peerDependencies": {
|
|
72
72
|
"koishi": "^4.18.9",
|
|
73
|
-
"koishi-plugin-chatluna": "^1.3.
|
|
73
|
+
"koishi-plugin-chatluna": "^1.3.3"
|
|
74
74
|
}
|
|
75
75
|
}
|