@chatluna/v1-shared-adapter 1.0.18 → 1.0.20
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 +65 -39
- package/lib/index.mjs +62 -38
- 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,69 @@ 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
|
-
if (mappedMessage?.[i + 1]?.role === "assistant") {
|
|
233
|
-
mappedMessage.push({
|
|
234
|
-
role: "user",
|
|
235
|
-
content: "Continue what I said to you last message. Follow these instructions."
|
|
236
|
-
});
|
|
237
|
-
}
|
|
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() === "human") {
|
|
233
|
+
lastTurnStartIndex = i;
|
|
234
|
+
break;
|
|
238
235
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
236
|
+
}
|
|
237
|
+
if (lastTurnStartIndex === -1) {
|
|
238
|
+
lastTurnStartIndex = 0;
|
|
239
|
+
}
|
|
240
|
+
return convertedMessages.map((message, index) => {
|
|
241
|
+
if (index >= lastTurnStartIndex) {
|
|
242
|
+
const originalMessage = originalMessages[index];
|
|
243
|
+
const reasoningContent = originalMessage?.additional_kwargs?.reasoning_content;
|
|
244
|
+
if (reasoningContent) {
|
|
245
|
+
return {
|
|
246
|
+
...message,
|
|
247
|
+
reasoning_content: reasoningContent
|
|
248
|
+
};
|
|
249
|
+
}
|
|
244
250
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
251
|
+
return message;
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
__name(processDeepSeekThinkMessages, "processDeepSeekThinkMessages");
|
|
255
|
+
function transformSystemMessages(messages) {
|
|
256
|
+
const mappedMessage = [];
|
|
257
|
+
for (let i = 0; i < messages.length; i++) {
|
|
258
|
+
const message = messages[i];
|
|
259
|
+
if (message.role !== "system") {
|
|
260
|
+
mappedMessage.push(message);
|
|
261
|
+
continue;
|
|
250
262
|
}
|
|
251
|
-
|
|
263
|
+
continue;
|
|
252
264
|
}
|
|
253
|
-
|
|
265
|
+
if (mappedMessage[mappedMessage.length - 1]?.role === "assistant") {
|
|
266
|
+
mappedMessage.push({
|
|
267
|
+
role: "user",
|
|
268
|
+
content: "Continue what I said to you last message. Follow these instructions."
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
if (mappedMessage[0]?.role === "assistant") {
|
|
272
|
+
mappedMessage.unshift({
|
|
273
|
+
role: "user",
|
|
274
|
+
content: "Continue what I said to you last time. Follow these instructions."
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
return mappedMessage;
|
|
254
278
|
}
|
|
255
|
-
__name(
|
|
279
|
+
__name(transformSystemMessages, "transformSystemMessages");
|
|
256
280
|
async function fetchImageUrl(plugin, content) {
|
|
257
281
|
const url = typeof content.image_url === "string" ? content.image_url : content.image_url.url;
|
|
258
282
|
if (url.includes("data:image") && url.includes("base64")) {
|
|
@@ -744,9 +768,11 @@ __name(createRequestContext, "createRequestContext");
|
|
|
744
768
|
isNonLLMModel,
|
|
745
769
|
langchainMessageToOpenAIMessage,
|
|
746
770
|
messageTypeToOpenAIRole,
|
|
771
|
+
processDeepSeekThinkMessages,
|
|
747
772
|
processReasoningContent,
|
|
748
773
|
processResponse,
|
|
749
774
|
processStreamResponse,
|
|
750
775
|
removeAdditionalProperties,
|
|
751
|
-
supportImageInput
|
|
776
|
+
supportImageInput,
|
|
777
|
+
transformSystemMessages
|
|
752
778
|
});
|
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,69 @@ 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
|
-
if (mappedMessage?.[i + 1]?.role === "assistant") {
|
|
203
|
-
mappedMessage.push({
|
|
204
|
-
role: "user",
|
|
205
|
-
content: "Continue what I said to you last message. Follow these instructions."
|
|
206
|
-
});
|
|
207
|
-
}
|
|
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() === "human") {
|
|
201
|
+
lastTurnStartIndex = i;
|
|
202
|
+
break;
|
|
208
203
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
204
|
+
}
|
|
205
|
+
if (lastTurnStartIndex === -1) {
|
|
206
|
+
lastTurnStartIndex = 0;
|
|
207
|
+
}
|
|
208
|
+
return convertedMessages.map((message, index) => {
|
|
209
|
+
if (index >= lastTurnStartIndex) {
|
|
210
|
+
const originalMessage = originalMessages[index];
|
|
211
|
+
const reasoningContent = originalMessage?.additional_kwargs?.reasoning_content;
|
|
212
|
+
if (reasoningContent) {
|
|
213
|
+
return {
|
|
214
|
+
...message,
|
|
215
|
+
reasoning_content: reasoningContent
|
|
216
|
+
};
|
|
217
|
+
}
|
|
214
218
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
219
|
+
return message;
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
__name(processDeepSeekThinkMessages, "processDeepSeekThinkMessages");
|
|
223
|
+
function transformSystemMessages(messages) {
|
|
224
|
+
const mappedMessage = [];
|
|
225
|
+
for (let i = 0; i < messages.length; i++) {
|
|
226
|
+
const message = messages[i];
|
|
227
|
+
if (message.role !== "system") {
|
|
228
|
+
mappedMessage.push(message);
|
|
229
|
+
continue;
|
|
220
230
|
}
|
|
221
|
-
|
|
231
|
+
continue;
|
|
222
232
|
}
|
|
223
|
-
|
|
233
|
+
if (mappedMessage[mappedMessage.length - 1]?.role === "assistant") {
|
|
234
|
+
mappedMessage.push({
|
|
235
|
+
role: "user",
|
|
236
|
+
content: "Continue what I said to you last message. Follow these instructions."
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
if (mappedMessage[0]?.role === "assistant") {
|
|
240
|
+
mappedMessage.unshift({
|
|
241
|
+
role: "user",
|
|
242
|
+
content: "Continue what I said to you last time. Follow these instructions."
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
return mappedMessage;
|
|
224
246
|
}
|
|
225
|
-
__name(
|
|
247
|
+
__name(transformSystemMessages, "transformSystemMessages");
|
|
226
248
|
async function fetchImageUrl(plugin, content) {
|
|
227
249
|
const url = typeof content.image_url === "string" ? content.image_url : content.image_url.url;
|
|
228
250
|
if (url.includes("data:image") && url.includes("base64")) {
|
|
@@ -713,9 +735,11 @@ export {
|
|
|
713
735
|
isNonLLMModel,
|
|
714
736
|
langchainMessageToOpenAIMessage,
|
|
715
737
|
messageTypeToOpenAIRole,
|
|
738
|
+
processDeepSeekThinkMessages,
|
|
716
739
|
processReasoningContent,
|
|
717
740
|
processResponse,
|
|
718
741
|
processStreamResponse,
|
|
719
742
|
removeAdditionalProperties,
|
|
720
|
-
supportImageInput
|
|
743
|
+
supportImageInput,
|
|
744
|
+
transformSystemMessages
|
|
721
745
|
};
|
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.20",
|
|
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
|
}
|