@mujian/js-sdk 0.0.6-beta.79 → 0.0.6-beta.80

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.
@@ -21,6 +21,11 @@ export type Message = {
21
21
  swipeInfo: Array<{
22
22
  mjv?: Mjv;
23
23
  }>;
24
+ flags: {
25
+ saved?: boolean;
26
+ emptyResponse?: boolean;
27
+ contentFilter?: boolean;
28
+ };
24
29
  };
25
30
  type MetaChunk = {
26
31
  type: 'meta';
@@ -35,6 +40,7 @@ type StreamChunk = {
35
40
  content: string;
36
41
  reasoning: string;
37
42
  };
43
+ finish_reason?: string;
38
44
  }
39
45
  ];
40
46
  isFinished: boolean;
package/dist/react.js CHANGED
@@ -8,6 +8,7 @@ import { v4 } from "uuid";
8
8
  import postmate from "postmate";
9
9
  import { Virtualizer } from "virtua";
10
10
  import { get } from "lodash-es";
11
+ import { produce } from "immer";
11
12
  const adjustIframeHeight = (iframeId)=>`
12
13
  (function () {
13
14
  let scheduled = false;
@@ -1072,13 +1073,6 @@ class SendMessageError extends Error {
1072
1073
  this.cause = cause;
1073
1074
  }
1074
1075
  }
1075
- class InvalidDeltaContentError extends Error {
1076
- constructor(message, cause){
1077
- super(message);
1078
- this.name = this.constructor.name;
1079
- this.cause = cause;
1080
- }
1081
- }
1082
1076
  class UnexpectedSseEndingError extends Error {
1083
1077
  constructor(message, cause){
1084
1078
  super(message);
@@ -1130,7 +1124,7 @@ async function* callSdk(mujian, content, type = 'generate', signal) {
1130
1124
  });
1131
1125
  }
1132
1126
  const NOT_SAVED_MSG_ID_PREFIX = 'not_saved';
1133
- const FALLBACK_MESSAGE = `哎呀,AI线路好像抽风了,请刷新页面后重新试试吧~`;
1127
+ const FALLBACK_MESSAGE = `哎呀,AI线路好像抽风了`;
1134
1128
  const useChatStreaming = ({ common, setError, setMessages, getMessages, setInput, mujian })=>{
1135
1129
  const { body } = common;
1136
1130
  const [isStreaming, setIsStreaming] = useState(false);
@@ -1147,7 +1141,8 @@ const useChatStreaming = ({ common, setError, setMessages, getMessages, setInput
1147
1141
  activeSwipeId: 0,
1148
1142
  isStreaming: false,
1149
1143
  sendAt: new Date(),
1150
- swipeInfo: []
1144
+ swipeInfo: [],
1145
+ flags: {}
1151
1146
  };
1152
1147
  const aiMessage = {
1153
1148
  id: `${NOT_SAVED_MSG_ID_PREFIX}_assistant_${Date.now()}`,
@@ -1161,25 +1156,19 @@ const useChatStreaming = ({ common, setError, setMessages, getMessages, setInput
1161
1156
  sendAt: new Date(),
1162
1157
  swipeInfo: [
1163
1158
  {}
1164
- ]
1159
+ ],
1160
+ flags: {}
1165
1161
  };
1166
- if (regenerate) setMessages((prev)=>{
1167
- const newMessages = [
1168
- ...prev
1169
- ];
1170
- const lastMessage = newMessages[newMessages.length - 1];
1171
- newMessages[newMessages.length - 1] = {
1172
- ...lastMessage,
1173
- activeSwipeId: lastMessage.swipes.length,
1174
- swipes: [
1175
- ...lastMessage.swipes,
1176
- ''
1177
- ],
1178
- content: '',
1179
- isStreaming: true
1162
+ if (regenerate) setMessages(produce((draft)=>{
1163
+ const lastMessage = draft[draft.length - 1];
1164
+ lastMessage.activeSwipeId = lastMessage.swipes.length;
1165
+ lastMessage.swipes.push('');
1166
+ lastMessage.content = '';
1167
+ lastMessage.isStreaming = true;
1168
+ lastMessage.flags = {
1169
+ saved: lastMessage.flags.saved
1180
1170
  };
1181
- return newMessages;
1182
- });
1171
+ }));
1183
1172
  else is_continue ? setMessages((prev)=>[
1184
1173
  ...prev,
1185
1174
  aiMessage
@@ -1200,54 +1189,38 @@ const useChatStreaming = ({ common, setError, setMessages, getMessages, setInput
1200
1189
  const data = line.slice(6);
1201
1190
  try {
1202
1191
  const parsedData = JSON.parse(data);
1192
+ console.log(parsedData);
1203
1193
  if (regenerate || 'meta' !== parsedData.type) {
1204
1194
  if ('stream' === parsedData.type) {
1205
1195
  const partialContent = parsedData.choices[0].delta.content;
1206
1196
  parsedData.choices[0].delta.reasoning;
1197
+ const chunkFinishReason = parsedData.choices[0].finish_reason;
1207
1198
  content += partialContent;
1208
- if (content || '' === content) {
1209
- setMessages((prev)=>{
1210
- const newMessages = [
1211
- ...prev
1212
- ];
1213
- const lastMessage = newMessages[newMessages.length - 1];
1214
- lastMessage.swipes[lastMessage.activeSwipeId] = content;
1215
- newMessages[newMessages.length - 1] = {
1216
- ...lastMessage,
1217
- content: content,
1218
- isStreaming: true
1219
- };
1220
- return newMessages;
1221
- });
1222
- await new Promise((resolve)=>setTimeout(resolve, 10));
1223
- } else {
1224
- console.error('data', data);
1225
- setError(new InvalidDeltaContentError(data));
1226
- }
1199
+ setMessages(produce((draft)=>{
1200
+ const lastMessage = draft[draft.length - 1];
1201
+ lastMessage.swipes[lastMessage.activeSwipeId] = content;
1202
+ lastMessage.content = content;
1203
+ lastMessage.isStreaming = true;
1204
+ if ('content_filter' === chunkFinishReason) lastMessage.flags.contentFilter = true;
1205
+ }));
1206
+ await new Promise((resolve)=>setTimeout(resolve, 10));
1227
1207
  } else if ('mjv' === parsedData.type) {
1228
1208
  const { value, delta, schema } = parsedData;
1229
- setMessages((prev)=>{
1230
- const newMessages = [
1231
- ...prev
1232
- ];
1233
- const lastMessage = newMessages[newMessages.length - 1];
1209
+ setMessages(produce((draft)=>{
1210
+ const lastMessage = draft[draft.length - 1];
1234
1211
  const mjv = {
1235
1212
  value,
1236
1213
  delta,
1237
1214
  schema
1238
1215
  };
1239
- const newSwipeInfo = lastMessage.swipeInfo;
1240
- if (newSwipeInfo[lastMessage.activeSwipeId]) newSwipeInfo[lastMessage.activeSwipeId].mjv = mjv;
1241
- else newSwipeInfo[lastMessage.activeSwipeId] = {
1242
- mjv
1243
- };
1244
- newMessages[newMessages.length - 1] = {
1245
- ...lastMessage,
1246
- swipeInfo: newSwipeInfo,
1216
+ const swipeInfo = lastMessage.swipeInfo;
1217
+ if (swipeInfo[lastMessage.activeSwipeId]) swipeInfo[lastMessage.activeSwipeId].mjv = mjv;
1218
+ else swipeInfo[lastMessage.activeSwipeId] = {
1247
1219
  mjv
1248
1220
  };
1249
- return newMessages;
1250
- });
1221
+ lastMessage.swipeInfo = swipeInfo;
1222
+ lastMessage.mjv = mjv;
1223
+ }));
1251
1224
  }
1252
1225
  } else {
1253
1226
  const { question_id, reply_id } = parsedData;
@@ -1255,14 +1228,18 @@ const useChatStreaming = ({ common, setError, setMessages, getMessages, setInput
1255
1228
  const newMessages = [
1256
1229
  ...prev
1257
1230
  ];
1258
- if (question_id && !is_continue) newMessages[newMessages.length - 2].id = question_id;
1259
- const lastMessage = newMessages[newMessages.length - 1];
1260
- newMessages[newMessages.length - 1] = {
1261
- ...lastMessage,
1262
- id: reply_id
1263
- };
1264
1231
  return newMessages;
1265
1232
  });
1233
+ setMessages(produce((draft)=>{
1234
+ if (question_id && !is_continue) {
1235
+ const userMsg = draft[draft.length - 2];
1236
+ userMsg.id = question_id;
1237
+ userMsg.flags.saved = true;
1238
+ }
1239
+ const lastMessage = draft[draft.length - 1];
1240
+ lastMessage.id = reply_id;
1241
+ lastMessage.flags.saved = true;
1242
+ }));
1266
1243
  continue;
1267
1244
  }
1268
1245
  } catch {
@@ -1282,21 +1259,15 @@ const useChatStreaming = ({ common, setError, setMessages, getMessages, setInput
1282
1259
  else setError(error);
1283
1260
  } finally{
1284
1261
  Log.i('stream end finally');
1285
- setMessages((prev)=>{
1286
- const newMessages = [
1287
- ...prev
1288
- ];
1289
- const lastMessage = {
1290
- ...newMessages[newMessages.length - 1],
1291
- isStreaming: false
1292
- };
1262
+ setMessages(produce((draft)=>{
1263
+ const lastMessage = draft[draft.length - 1];
1264
+ lastMessage.isStreaming = false;
1293
1265
  if (!lastMessage.swipes[lastMessage.activeSwipeId]) {
1294
1266
  lastMessage.swipes[lastMessage.activeSwipeId] = FALLBACK_MESSAGE;
1295
1267
  lastMessage.content = FALLBACK_MESSAGE;
1268
+ lastMessage.flags.emptyResponse = true;
1296
1269
  }
1297
- newMessages[newMessages.length - 1] = lastMessage;
1298
- return newMessages;
1299
- });
1270
+ }));
1300
1271
  }
1301
1272
  } catch (error) {
1302
1273
  console.error('Error:', error);
@@ -1336,7 +1307,10 @@ const useChat = ({ body, onError, onFinish, pageSize })=>{
1336
1307
  cursor: resp.nextCursor,
1337
1308
  list: resp.messages.map((m)=>({
1338
1309
  ...m,
1339
- mjv: m.swipeInfo[m.activeSwipeId]?.mjv
1310
+ mjv: m.swipeInfo[m.activeSwipeId]?.mjv,
1311
+ flags: {
1312
+ saved: true
1313
+ }
1340
1314
  })),
1341
1315
  noMore: !resp.nextCursor
1342
1316
  };