@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((
|
|
1167
|
-
const
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
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((
|
|
1230
|
-
const
|
|
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
|
|
1240
|
-
if (
|
|
1241
|
-
else
|
|
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
|
-
|
|
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((
|
|
1286
|
-
const
|
|
1287
|
-
|
|
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
|
-
|
|
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
|
};
|