@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 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
- const mappedMessage = [];
215
- for (let i = 0; i < mappedMessage.length; i++) {
216
- const message = mappedMessage[i];
217
- if (message.role !== "system") {
218
- mappedMessage.push(message);
219
- continue;
220
- }
221
- if (removeSystemMessage) {
222
- continue;
223
- }
224
- mappedMessage.push({
225
- role: "user",
226
- content: message.content
227
- });
228
- mappedMessage.push({
229
- role: "assistant",
230
- content: "Okay, what do I need to do?"
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
- if (mappedMessage[mappedMessage.length - 1].role === "assistant") {
240
- mappedMessage.push({
241
- role: "user",
242
- content: "Continue what I said to you last message. Follow these instructions."
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
- if (mappedMessage[0].role === "assistant") {
246
- mappedMessage.unshift({
247
- role: "user",
248
- content: "Continue what I said to you last time. Follow these instructions."
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
- return mappedMessage;
263
+ continue;
252
264
  }
253
- return result;
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(langchainMessageToOpenAIMessage, "langchainMessageToOpenAIMessage");
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
- const mappedMessage = [];
185
- for (let i = 0; i < mappedMessage.length; i++) {
186
- const message = mappedMessage[i];
187
- if (message.role !== "system") {
188
- mappedMessage.push(message);
189
- continue;
190
- }
191
- if (removeSystemMessage) {
192
- continue;
193
- }
194
- mappedMessage.push({
195
- role: "user",
196
- content: message.content
197
- });
198
- mappedMessage.push({
199
- role: "assistant",
200
- content: "Okay, what do I need to do?"
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
- if (mappedMessage[mappedMessage.length - 1].role === "assistant") {
210
- mappedMessage.push({
211
- role: "user",
212
- content: "Continue what I said to you last message. Follow these instructions."
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
- if (mappedMessage[0].role === "assistant") {
216
- mappedMessage.unshift({
217
- role: "user",
218
- content: "Continue what I said to you last time. Follow these instructions."
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
- return mappedMessage;
231
+ continue;
222
232
  }
223
- return result;
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(langchainMessageToOpenAIMessage, "langchainMessageToOpenAIMessage");
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.18",
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.2"
73
+ "koishi-plugin-chatluna": "^1.3.3"
74
74
  }
75
75
  }