@chatluna/v1-shared-adapter 1.0.35 → 1.0.36

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
@@ -517,6 +517,9 @@ function processInterleavedThinkMessages(convertedMessages, originalMessages) {
517
517
  if (originalMessages.length === 0) {
518
518
  return convertedMessages;
519
519
  }
520
+ const hasToolCallRound = convertedMessages.some(
521
+ (message) => message.role === "assistant" && (message.tool_calls?.length ?? 0) > 0
522
+ );
520
523
  let lastTurnStartIndex = -1;
521
524
  for (let i = originalMessages.length - 1; i >= 0; i--) {
522
525
  const message = originalMessages[i];
@@ -538,10 +541,10 @@ function processInterleavedThinkMessages(convertedMessages, originalMessages) {
538
541
  lastTurnStartIndex = 0;
539
542
  }
540
543
  return convertedMessages.map((message, index) => {
541
- if (index >= lastTurnStartIndex) {
544
+ if (hasToolCallRound || index >= lastTurnStartIndex) {
542
545
  const originalMessage = originalMessages[index];
543
546
  const reasoningContent = originalMessage?.additional_kwargs?.reasoning_content;
544
- if (reasoningContent) {
547
+ if (reasoningContent != null) {
545
548
  return {
546
549
  ...message,
547
550
  reasoning_content: reasoningContent
@@ -732,10 +735,10 @@ function removeAdditionalProperties(schema) {
732
735
  __name(removeAdditionalProperties, "removeAdditionalProperties");
733
736
  function convertMessageToMessageChunk(message) {
734
737
  const content = message.content ?? "";
735
- const reasoningContent = message.reasoning_content ?? "";
738
+ const reasoningContent = message.reasoning_content;
736
739
  const role = ((message.role?.length ?? 0) > 0 ? message.role : "assistant").toLowerCase();
737
740
  const additionalKwargs = {};
738
- if (reasoningContent.length > 0) {
741
+ if (reasoningContent != null) {
739
742
  additionalKwargs.reasoning_content = reasoningContent;
740
743
  }
741
744
  if (role === "user") {
@@ -782,7 +785,7 @@ __name(convertMessageToMessageChunk, "convertMessageToMessageChunk");
782
785
  function convertDeltaToMessageChunk(delta, defaultRole) {
783
786
  const role = ((delta.role?.length ?? 0) > 0 ? delta.role : defaultRole).toLowerCase();
784
787
  const content = delta.content ?? "";
785
- const reasoningContent = delta.reasoning_content ?? "";
788
+ const reasoningContent = delta.reasoning_content;
786
789
  let additionalKwargs;
787
790
  if (delta.function_call) {
788
791
  additionalKwargs = {
@@ -791,7 +794,7 @@ function convertDeltaToMessageChunk(delta, defaultRole) {
791
794
  } else {
792
795
  additionalKwargs = {};
793
796
  }
794
- if (reasoningContent.length > 0) {
797
+ if (reasoningContent != null) {
795
798
  additionalKwargs.reasoning_content = reasoningContent;
796
799
  }
797
800
  if (role === "user") {
@@ -925,6 +928,7 @@ async function* processStreamResponse(requestContext, iterator) {
925
928
  let errorCount = 0;
926
929
  const reasoningState = {
927
930
  content: "",
931
+ seen: false,
928
932
  startedAt: Date.now(),
929
933
  endedAt: void 0
930
934
  };
@@ -978,8 +982,11 @@ async function* processStreamResponse(requestContext, iterator) {
978
982
  if (reasoningState.endedAt == null && hasResult) {
979
983
  reasoningState.endedAt = Date.now();
980
984
  }
981
- if (reasoningState.endedAt == null && !hasResult && delta.reasoning_content) {
982
- reasoningState.content += delta.reasoning_content;
985
+ if (Object.hasOwn(delta, "reasoning_content")) {
986
+ reasoningState.seen = true;
987
+ if (reasoningState.endedAt == null && !hasResult && typeof delta.reasoning_content === "string") {
988
+ reasoningState.content += delta.reasoning_content;
989
+ }
983
990
  }
984
991
  const messageChunk = convertDeltaToMessageChunk(
985
992
  {
@@ -1016,12 +1023,14 @@ async function* processStreamResponse(requestContext, iterator) {
1016
1023
  errorCount++;
1017
1024
  }
1018
1025
  }
1019
- if (reasoningState.content.length > 0) {
1026
+ if (reasoningState.seen || reasoningState.content.length > 0) {
1020
1027
  const reasoningTime = (reasoningState.endedAt ?? Date.now()) - reasoningState.startedAt;
1021
1028
  yield new import_outputs.ChatGenerationChunk({
1022
1029
  message: new import_messages2.AIMessageChunk({
1023
1030
  content: "",
1024
1031
  additional_kwargs: {
1032
+ // Always emit the field (possibly "") so DeepSeek-V4
1033
+ // thinking mode receives reasoning_content back verbatim.
1025
1034
  reasoning_content: reasoningState.content,
1026
1035
  ...reasoningTime != null ? { reasoning_time: reasoningTime } : {}
1027
1036
  }
package/lib/index.mjs CHANGED
@@ -464,6 +464,9 @@ function processInterleavedThinkMessages(convertedMessages, originalMessages) {
464
464
  if (originalMessages.length === 0) {
465
465
  return convertedMessages;
466
466
  }
467
+ const hasToolCallRound = convertedMessages.some(
468
+ (message) => message.role === "assistant" && (message.tool_calls?.length ?? 0) > 0
469
+ );
467
470
  let lastTurnStartIndex = -1;
468
471
  for (let i = originalMessages.length - 1; i >= 0; i--) {
469
472
  const message = originalMessages[i];
@@ -485,10 +488,10 @@ function processInterleavedThinkMessages(convertedMessages, originalMessages) {
485
488
  lastTurnStartIndex = 0;
486
489
  }
487
490
  return convertedMessages.map((message, index) => {
488
- if (index >= lastTurnStartIndex) {
491
+ if (hasToolCallRound || index >= lastTurnStartIndex) {
489
492
  const originalMessage = originalMessages[index];
490
493
  const reasoningContent = originalMessage?.additional_kwargs?.reasoning_content;
491
- if (reasoningContent) {
494
+ if (reasoningContent != null) {
492
495
  return {
493
496
  ...message,
494
497
  reasoning_content: reasoningContent
@@ -679,10 +682,10 @@ function removeAdditionalProperties(schema) {
679
682
  __name(removeAdditionalProperties, "removeAdditionalProperties");
680
683
  function convertMessageToMessageChunk(message) {
681
684
  const content = message.content ?? "";
682
- const reasoningContent = message.reasoning_content ?? "";
685
+ const reasoningContent = message.reasoning_content;
683
686
  const role = ((message.role?.length ?? 0) > 0 ? message.role : "assistant").toLowerCase();
684
687
  const additionalKwargs = {};
685
- if (reasoningContent.length > 0) {
688
+ if (reasoningContent != null) {
686
689
  additionalKwargs.reasoning_content = reasoningContent;
687
690
  }
688
691
  if (role === "user") {
@@ -729,7 +732,7 @@ __name(convertMessageToMessageChunk, "convertMessageToMessageChunk");
729
732
  function convertDeltaToMessageChunk(delta, defaultRole) {
730
733
  const role = ((delta.role?.length ?? 0) > 0 ? delta.role : defaultRole).toLowerCase();
731
734
  const content = delta.content ?? "";
732
- const reasoningContent = delta.reasoning_content ?? "";
735
+ const reasoningContent = delta.reasoning_content;
733
736
  let additionalKwargs;
734
737
  if (delta.function_call) {
735
738
  additionalKwargs = {
@@ -738,7 +741,7 @@ function convertDeltaToMessageChunk(delta, defaultRole) {
738
741
  } else {
739
742
  additionalKwargs = {};
740
743
  }
741
- if (reasoningContent.length > 0) {
744
+ if (reasoningContent != null) {
742
745
  additionalKwargs.reasoning_content = reasoningContent;
743
746
  }
744
747
  if (role === "user") {
@@ -872,6 +875,7 @@ async function* processStreamResponse(requestContext, iterator) {
872
875
  let errorCount = 0;
873
876
  const reasoningState = {
874
877
  content: "",
878
+ seen: false,
875
879
  startedAt: Date.now(),
876
880
  endedAt: void 0
877
881
  };
@@ -925,8 +929,11 @@ async function* processStreamResponse(requestContext, iterator) {
925
929
  if (reasoningState.endedAt == null && hasResult) {
926
930
  reasoningState.endedAt = Date.now();
927
931
  }
928
- if (reasoningState.endedAt == null && !hasResult && delta.reasoning_content) {
929
- reasoningState.content += delta.reasoning_content;
932
+ if (Object.hasOwn(delta, "reasoning_content")) {
933
+ reasoningState.seen = true;
934
+ if (reasoningState.endedAt == null && !hasResult && typeof delta.reasoning_content === "string") {
935
+ reasoningState.content += delta.reasoning_content;
936
+ }
930
937
  }
931
938
  const messageChunk = convertDeltaToMessageChunk(
932
939
  {
@@ -963,12 +970,14 @@ async function* processStreamResponse(requestContext, iterator) {
963
970
  errorCount++;
964
971
  }
965
972
  }
966
- if (reasoningState.content.length > 0) {
973
+ if (reasoningState.seen || reasoningState.content.length > 0) {
967
974
  const reasoningTime = (reasoningState.endedAt ?? Date.now()) - reasoningState.startedAt;
968
975
  yield new ChatGenerationChunk({
969
976
  message: new AIMessageChunk2({
970
977
  content: "",
971
978
  additional_kwargs: {
979
+ // Always emit the field (possibly "") so DeepSeek-V4
980
+ // thinking mode receives reasoning_content back verbatim.
972
981
  reasoning_content: reasoningState.content,
973
982
  ...reasoningTime != null ? { reasoning_time: reasoningTime } : {}
974
983
  }
@@ -54,7 +54,7 @@ export declare function buildResponseParams(params: ModelRequestParams, plugin:
54
54
  top_p: number;
55
55
  prompt_cache_key: string;
56
56
  reasoning: {
57
- effort: "minimal" | "low" | "medium" | "high" | "max" | "xhigh";
57
+ effort: "low" | "high" | "minimal" | "medium" | "max" | "xhigh";
58
58
  };
59
59
  stream: boolean;
60
60
  stream_options: {
package/lib/utils.d.ts CHANGED
@@ -71,6 +71,6 @@ export declare function messageTypeToOpenAIRole(type: MessageType): ChatCompleti
71
71
  export declare function formatToolsToOpenAITools(tools: StructuredTool[], includeGoogleSearch: boolean): ChatCompletionTool[];
72
72
  export declare function formatToolToOpenAITool(tool: StructuredTool): ChatCompletionTool;
73
73
  export declare function removeAdditionalProperties(schema: JsonSchema7Type): JsonSchema7Type;
74
- export declare function convertMessageToMessageChunk(message: ChatCompletionResponseMessage): AIMessageChunk | HumanMessageChunk | SystemMessageChunk | FunctionMessageChunk | ToolMessageChunk | ChatMessageChunk;
75
- export declare function convertDeltaToMessageChunk(delta: Record<string, any>, defaultRole?: ChatCompletionResponseMessageRoleEnum): AIMessageChunk | HumanMessageChunk | SystemMessageChunk | FunctionMessageChunk | ToolMessageChunk | ChatMessageChunk;
74
+ export declare function convertMessageToMessageChunk(message: ChatCompletionResponseMessage): HumanMessageChunk | AIMessageChunk | SystemMessageChunk | FunctionMessageChunk | ToolMessageChunk | ChatMessageChunk;
75
+ export declare function convertDeltaToMessageChunk(delta: Record<string, any>, defaultRole?: ChatCompletionResponseMessageRoleEnum): HumanMessageChunk | AIMessageChunk | SystemMessageChunk | FunctionMessageChunk | ToolMessageChunk | ChatMessageChunk;
76
76
  export {};
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.35",
4
+ "version": "1.0.36",
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.4.0-alpha.10"
73
+ "koishi-plugin-chatluna": "^1.4.0-alpha.13"
74
74
  }
75
75
  }