@myun/gimi-chat 0.9.44 → 0.9.46
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/dist/apis/useApi.d.ts +6 -0
- package/dist/apis/useApi.js +45 -1
- package/dist/components/ai-chat-dialogue/index copy.js +1 -1
- package/dist/components/ai-chat-dialogue/index.js +4 -2
- package/dist/components/answer-item/component/artifacts/index.d.ts +13 -0
- package/dist/components/answer-item/component/artifacts/index.js +52 -0
- package/dist/components/answer-item/component/artifacts/index.module.css +24 -0
- package/dist/components/answer-item/component/tool-list/index.d.ts +7 -0
- package/dist/components/answer-item/component/tool-list/index.js +97 -0
- package/dist/components/answer-item/component/tool-list/index.module.css +92 -0
- package/dist/components/answer-item/index.d.ts +2 -1
- package/dist/components/answer-item/index.js +160 -7
- package/dist/components/answer-item/index.module.css +24 -0
- package/dist/components/ask-card/index.d.ts +1 -1
- package/dist/components/chat-input/extension/index.d.ts +1 -0
- package/dist/components/chat-input/extension/index.js +2 -1
- package/dist/components/chat-input/extension/skill/MentionList.d.ts +30 -0
- package/dist/components/chat-input/extension/skill/MentionList.js +181 -0
- package/dist/components/chat-input/extension/skill/ReferSlot.d.ts +3 -0
- package/dist/components/chat-input/extension/skill/ReferSlot.js +100 -0
- package/dist/components/chat-input/extension/skill/data.d.ts +10 -0
- package/dist/components/chat-input/extension/skill/data.js +49 -0
- package/dist/components/chat-input/extension/skill/index.d.ts +7 -0
- package/dist/components/chat-input/extension/skill/index.js +5 -0
- package/dist/components/chat-input/extension/skill/index.less +100 -0
- package/dist/components/chat-input/extension/skill/suggestion.d.ts +14 -0
- package/dist/components/chat-input/extension/skill/suggestion.js +173 -0
- package/dist/components/chat-input/index.js +64 -16
- package/dist/components/file-card/index.js +2 -1
- package/dist/components/file-card/index.module.css +1 -0
- package/dist/components/knowledge-trace/tryWatch.js +8 -1
- package/dist/components/message-list/index.js +15 -3
- package/dist/components/message-list/index.module.css +3 -0
- package/dist/components/message-list/skill-tag/index.d.ts +5 -0
- package/dist/components/message-list/skill-tag/index.js +24 -0
- package/dist/components/message-list/skill-tag/index.module.css +22 -0
- package/dist/components/templates/CommonChat.js +3 -1
- package/dist/hooks/useChatActions.d.ts +2 -1
- package/dist/hooks/useChatActions.js +41 -3
- package/dist/hooks/useChatStream.d.ts +6 -1
- package/dist/hooks/useChatStream.js +96 -5
- package/dist/hooks/useCommonChatAPI.d.ts +1 -1
- package/dist/hooks/useCommonChatAPI.js +190 -54
- package/dist/i18n/locales/en-US.d.ts +3 -0
- package/dist/i18n/locales/en-US.js +10 -7
- package/dist/i18n/locales/zh-CN.d.ts +3 -0
- package/dist/i18n/locales/zh-CN.js +4 -1
- package/dist/interfaces/chatMessage.d.ts +38 -0
- package/dist/umd/index.min.js +1 -1
- package/dist/utils/tools.d.ts +6 -0
- package/dist/utils/tools.js +31 -0
- package/package.json +3 -2
|
@@ -24,6 +24,8 @@ import { FileStatus } from "../../interfaces/fileInterface";
|
|
|
24
24
|
import useChatActions from "../../hooks/useChatActions";
|
|
25
25
|
import CopyButton from "../message-actions/CopyButton";
|
|
26
26
|
import { Virtuoso } from 'react-virtuoso';
|
|
27
|
+
import { MMarkdown } from '@myun/gimi-design';
|
|
28
|
+
import SkillTag from "./skill-tag";
|
|
27
29
|
var MessageItem = /*#__PURE__*/React.memo(function (props) {
|
|
28
30
|
var _v$quoteTeachModelLis, _v$quoteProductList, _v$messageFilesList;
|
|
29
31
|
var v = props.v,
|
|
@@ -41,6 +43,7 @@ var MessageItem = /*#__PURE__*/React.memo(function (props) {
|
|
|
41
43
|
handleClickPromptWord = props.handleClickPromptWord,
|
|
42
44
|
handleShowCourse = props.handleShowCourse,
|
|
43
45
|
handleClickAskList = props.handleClickAskList,
|
|
46
|
+
handleClickConfirm = props.handleClickConfirm,
|
|
44
47
|
playTTSByText = props.playTTSByText,
|
|
45
48
|
stopTTSByText = props.stopTTSByText,
|
|
46
49
|
isPlaying = props.isPlaying,
|
|
@@ -73,7 +76,13 @@ var MessageItem = /*#__PURE__*/React.memo(function (props) {
|
|
|
73
76
|
quoteTeachModelList: v.quoteTeachModelList
|
|
74
77
|
}), v.content && /*#__PURE__*/React.createElement("div", {
|
|
75
78
|
className: styles.title
|
|
76
|
-
},
|
|
79
|
+
}, /*#__PURE__*/React.createElement(MMarkdown, {
|
|
80
|
+
content: replaceBraces(v.content) || '',
|
|
81
|
+
customRender: [{
|
|
82
|
+
type: 'skilltool',
|
|
83
|
+
component: SkillTag
|
|
84
|
+
}]
|
|
85
|
+
})), v.messageFiles && /*#__PURE__*/React.createElement("div", {
|
|
77
86
|
className: styles.listBox
|
|
78
87
|
}, /*#__PURE__*/React.createElement(UploadList, {
|
|
79
88
|
isMessage: true,
|
|
@@ -102,6 +111,7 @@ var MessageItem = /*#__PURE__*/React.memo(function (props) {
|
|
|
102
111
|
handleClickPromptWord: handleClickPromptWord,
|
|
103
112
|
handleShowCourse: handleShowCourse,
|
|
104
113
|
handleClickAskList: handleClickAskList,
|
|
114
|
+
handleClickConfirm: handleClickConfirm,
|
|
105
115
|
playTTSByText: playTTSByText,
|
|
106
116
|
stopTTSByText: stopTTSByText,
|
|
107
117
|
isVoicePlaying: isPlaying,
|
|
@@ -170,7 +180,8 @@ var MessageList = function MessageList(_ref) {
|
|
|
170
180
|
// 使用 chatActions hook 提供的函数
|
|
171
181
|
var showOpera = chatActions.showOpera,
|
|
172
182
|
showCommend = chatActions.showCommend,
|
|
173
|
-
handleClickAskList = chatActions.handleClickAskList
|
|
183
|
+
handleClickAskList = chatActions.handleClickAskList,
|
|
184
|
+
handleClickConfirm = chatActions.handleClickConfirm;
|
|
174
185
|
var handleClickPromptWord = React.useCallback(function (prompt) {
|
|
175
186
|
handleSend(prompt);
|
|
176
187
|
}, [handleSend]);
|
|
@@ -279,6 +290,7 @@ var MessageList = function MessageList(_ref) {
|
|
|
279
290
|
handleClickPromptWord: handleClickPromptWord,
|
|
280
291
|
handleShowCourse: handleShowCourse,
|
|
281
292
|
handleClickAskList: handleClickAskList,
|
|
293
|
+
handleClickConfirm: handleClickConfirm,
|
|
282
294
|
playTTSByText: playTTSByText,
|
|
283
295
|
stopTTSByText: stopTTSByText,
|
|
284
296
|
isPlaying: isPlaying,
|
|
@@ -294,7 +306,7 @@ var MessageList = function MessageList(_ref) {
|
|
|
294
306
|
onCurrentTraceVideoClick: onCurrentTraceVideoClick,
|
|
295
307
|
curPlayer: curPlayer
|
|
296
308
|
});
|
|
297
|
-
}, [chatUI, hideUserMessage, showOpera, onCopyCallback, onSucessExcel, onFailureExcel, onRetryExcel, showCommend, handleClickPromptWord, handleShowCourse, handleClickAskList, playTTSByText, stopTTSByText, isPlaying, onRegenerateClick, enableCopy, enableLike, enableUnLike, enableRegenerate, enableVoicePlay, onDownloadCallback, reasoningTitle, model, handleReTry, onLikeCallback, onUnLikeCallback]);
|
|
309
|
+
}, [chatUI, hideUserMessage, showOpera, onCopyCallback, onSucessExcel, onFailureExcel, onRetryExcel, showCommend, handleClickPromptWord, handleShowCourse, handleClickAskList, handleClickConfirm, playTTSByText, stopTTSByText, isPlaying, onRegenerateClick, enableCopy, enableLike, enableUnLike, enableRegenerate, enableVoicePlay, onDownloadCallback, reasoningTitle, model, handleReTry, onLikeCallback, onUnLikeCallback]);
|
|
298
310
|
return /*#__PURE__*/React.createElement("div", {
|
|
299
311
|
className: classNames(styles.main),
|
|
300
312
|
style: buildStyle()
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React, { useMemo } from 'react';
|
|
2
|
+
import styles from "./index.module.css";
|
|
3
|
+
var SkillTag = function SkillTag(_ref) {
|
|
4
|
+
var value = _ref.value;
|
|
5
|
+
console.log(value);
|
|
6
|
+
var item = useMemo(function () {
|
|
7
|
+
try {
|
|
8
|
+
return JSON.parse(value);
|
|
9
|
+
} catch (e) {
|
|
10
|
+
console.error('[skill-tag] parse value error:', e);
|
|
11
|
+
return {};
|
|
12
|
+
}
|
|
13
|
+
}, [value]);
|
|
14
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
15
|
+
className: styles.skillItem
|
|
16
|
+
}, /*#__PURE__*/React.createElement("img", {
|
|
17
|
+
src: item.imageUrl || '',
|
|
18
|
+
className: styles.icon,
|
|
19
|
+
alt: ""
|
|
20
|
+
}), /*#__PURE__*/React.createElement("span", {
|
|
21
|
+
className: styles.name
|
|
22
|
+
}, item.toolName || ''));
|
|
23
|
+
};
|
|
24
|
+
export default SkillTag;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
.skillItem {
|
|
2
|
+
display: inline-block;
|
|
3
|
+
height: 24px;
|
|
4
|
+
padding: 0 8px;
|
|
5
|
+
height: 24px;
|
|
6
|
+
border-radius: 10px;
|
|
7
|
+
margin-right: 6px;
|
|
8
|
+
background-color: #E3E3E1;
|
|
9
|
+
line-height: 20px;
|
|
10
|
+
}
|
|
11
|
+
.skillItem .icon {
|
|
12
|
+
width: 14px;
|
|
13
|
+
height: 14px;
|
|
14
|
+
margin-right: 4px;
|
|
15
|
+
vertical-align: middle;
|
|
16
|
+
}
|
|
17
|
+
.skillItem .name {
|
|
18
|
+
font-size: 14px;
|
|
19
|
+
color: var(--theme-deepNeutral, #221813);
|
|
20
|
+
font-weight: 500;
|
|
21
|
+
vertical-align: middle;
|
|
22
|
+
}
|
|
@@ -261,7 +261,9 @@ var CommonChat = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
261
261
|
width: '100%'
|
|
262
262
|
}
|
|
263
263
|
}, /*#__PURE__*/React.createElement(AiLoading, null)), /*#__PURE__*/React.createElement(MessageList, _extends({
|
|
264
|
-
chatList: messageList || defaultMessages
|
|
264
|
+
chatList: messageList || defaultMessages
|
|
265
|
+
// chatList={defaultMessages}
|
|
266
|
+
,
|
|
265
267
|
handleSend: handleSend,
|
|
266
268
|
platform: platform,
|
|
267
269
|
inputModelRef: inputModelRef,
|
|
@@ -7,6 +7,7 @@ export declare const usePureChatActions: () => {
|
|
|
7
7
|
declare const useChatActions: (showCopyId: number | null, inputModelRef: React.MutableRefObject<any>, handleSend: (val: string, agent?: any, isSystemAuto?: boolean) => void) => {
|
|
8
8
|
showOpera: (id: number) => boolean;
|
|
9
9
|
showCommend: (id: number) => boolean;
|
|
10
|
-
handleClickAskList: (item: any, operation: string, key: string, value?: string | undefined) => void;
|
|
10
|
+
handleClickAskList: (item: any, operation: string, key: string, value?: string | undefined, inputModel?: any) => void;
|
|
11
|
+
handleClickConfirm: (item: any, confirmed: boolean) => void;
|
|
11
12
|
};
|
|
12
13
|
export default useChatActions;
|
|
@@ -187,13 +187,13 @@ var useChatActions = function useChatActions(showCopyId, inputModelRef, handleSe
|
|
|
187
187
|
* 点击问询列表
|
|
188
188
|
*/
|
|
189
189
|
var handleClickAskList = React.useMemo(function () {
|
|
190
|
-
return debounce(function (item, operation, key, value) {
|
|
190
|
+
return debounce(function (item, operation, key, value, inputModel) {
|
|
191
191
|
var _messageList8;
|
|
192
192
|
var messageList = messageListRef.current;
|
|
193
193
|
if ((_messageList8 = messageList[messageList.length - 1]) !== null && _messageList8 !== void 0 && _messageList8.selectValue) {
|
|
194
194
|
return;
|
|
195
195
|
}
|
|
196
|
-
var _inputModel = _defineProperty({}, "".concat(item.id, ".").concat(operation), key);
|
|
196
|
+
var _inputModel = inputModel || _defineProperty({}, "".concat(item.id, ".").concat(operation), key);
|
|
197
197
|
inputModelRef.current = _inputModel;
|
|
198
198
|
var newMessageList = updateLastMessage(messageList, function (lastMessage) {
|
|
199
199
|
return _objectSpread(_objectSpread({}, lastMessage), {}, {
|
|
@@ -206,10 +206,48 @@ var useChatActions = function useChatActions(showCopyId, inputModelRef, handleSe
|
|
|
206
206
|
handleSend(value || '');
|
|
207
207
|
}, 100);
|
|
208
208
|
}, [handleSend, inputModelRef, dispatch]);
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* 确认/拒绝工具调用
|
|
212
|
+
* 绕开 ask 的 selectValue 防重逻辑,直接组装 user_confirm inputModel 发送
|
|
213
|
+
*/
|
|
214
|
+
var handleClickConfirm = React.useCallback(function (item, confirmed) {
|
|
215
|
+
var _lastMessage$toolList, _item$data, _item$data2;
|
|
216
|
+
// 1. 更新最后一条消息的 toolList,把这条 user_confirm 改成已确认/已拒绝
|
|
217
|
+
var currentMessageList = messageListRef.current;
|
|
218
|
+
var lastMessage = currentMessageList[currentMessageList.length - 1];
|
|
219
|
+
var updatedToolList = (_lastMessage$toolList = lastMessage.toolList) === null || _lastMessage$toolList === void 0 ? void 0 : _lastMessage$toolList.map(function (tool) {
|
|
220
|
+
return tool.id === item.id ? _objectSpread(_objectSpread({}, tool), {}, {
|
|
221
|
+
moduleType: "user_confirm",
|
|
222
|
+
status: 'COMPLETED',
|
|
223
|
+
confirmStatus: confirmed ? "CONFIRMED" : "REJECTED"
|
|
224
|
+
}) : tool;
|
|
225
|
+
});
|
|
226
|
+
var updatedMessageList = [].concat(_toConsumableArray(currentMessageList.slice(0, -1)), [_objectSpread(_objectSpread({}, lastMessage), {}, {
|
|
227
|
+
toolList: updatedToolList
|
|
228
|
+
})]);
|
|
229
|
+
dispatch(setMessageList({
|
|
230
|
+
messageList: updatedMessageList
|
|
231
|
+
}));
|
|
232
|
+
|
|
233
|
+
// 2. 组装 inputModel 并发送
|
|
234
|
+
var inputModel = {
|
|
235
|
+
user_confirm: {
|
|
236
|
+
askingEventId: (_item$data = item.data) === null || _item$data === void 0 ? void 0 : _item$data.askingEventId,
|
|
237
|
+
confirmResults: [{
|
|
238
|
+
toolCallId: ((_item$data2 = item.data) === null || _item$data2 === void 0 || (_item$data2 = _item$data2.toolCalls) === null || _item$data2 === void 0 || (_item$data2 = _item$data2[0]) === null || _item$data2 === void 0 ? void 0 : _item$data2.id) || '',
|
|
239
|
+
confirmed: confirmed
|
|
240
|
+
}]
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
inputModelRef.current = inputModel;
|
|
244
|
+
handleSend('', undefined, true, undefined, true); // skipCreateNewMessage: true 复用当前消息
|
|
245
|
+
}, [handleSend, inputModelRef, dispatch]);
|
|
209
246
|
return {
|
|
210
247
|
showOpera: showOpera,
|
|
211
248
|
showCommend: showCommend,
|
|
212
|
-
handleClickAskList: handleClickAskList
|
|
249
|
+
handleClickAskList: handleClickAskList,
|
|
250
|
+
handleClickConfirm: handleClickConfirm
|
|
213
251
|
};
|
|
214
252
|
};
|
|
215
253
|
export default useChatActions;
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
+
export declare const TOOL_MODULE_TYPES: string[];
|
|
3
|
+
export declare const MODULE_TYPE_NAMES: Record<string, string>;
|
|
4
|
+
export declare const getToolNameByStatus: (moduleType: string, status?: string) => string;
|
|
2
5
|
interface StreamChatCallbacks {
|
|
3
6
|
onSseOpen?: (response: Response) => void;
|
|
4
7
|
onDataReceived?: (response: string, type: 'content' | 'reasoningContent') => void;
|
|
5
|
-
onComplete?: (response: any, type: string, reasoningResponse?: string) => void;
|
|
8
|
+
onComplete?: (response: any, type: string, reasoningResponse?: string, dataObj?: any) => void;
|
|
6
9
|
onErrorComplete?: () => void;
|
|
7
10
|
onMCPToolsStream?: (dataObj: any) => void;
|
|
11
|
+
onToolStream?: (dataObj: any) => void;
|
|
12
|
+
onArtifactStream?: (dataObj: any) => void;
|
|
8
13
|
}
|
|
9
14
|
/**
|
|
10
15
|
* 处理流式聊天逻辑
|
|
@@ -15,6 +15,76 @@ import { useLastEventId } from "./useLastEventId";
|
|
|
15
15
|
import { useAppSelector, useAppDispatch } from "../store/hooks";
|
|
16
16
|
import { setIsMsgRecieving } from "../store/slices/gimiMenuSlice";
|
|
17
17
|
import { getTimeZone } from "../utils/tools";
|
|
18
|
+
|
|
19
|
+
// 需要展示为工具调用的模块类型
|
|
20
|
+
export var TOOL_MODULE_TYPES = ['tool_invocation', 'tool_result', "thinking"
|
|
21
|
+
// 'start', 'llm', 'knowledge', 'video', 'image-text',
|
|
22
|
+
// 'input', 'if-select', 'intent', 'talk', 'text',
|
|
23
|
+
// 'video-caption', 'summary', 'loop', 'skillBase',
|
|
24
|
+
// 'break', 'http', 'esKnowledge', 'mcp'
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
// 所有需要进入处理流程的模块类型(包括工具类型 + 特殊处理类型)
|
|
28
|
+
var PROCESSABLE_MODULE_TYPES = [].concat(TOOL_MODULE_TYPES, ['end', 'ask', 'skill', 'tool_call', 'artifact', 'user_confirm', 'COMPLETED']);
|
|
29
|
+
|
|
30
|
+
// 模块类型到工具名称的映射
|
|
31
|
+
export var MODULE_TYPE_NAMES = {
|
|
32
|
+
'start': '开始节点',
|
|
33
|
+
'end': '结束节点',
|
|
34
|
+
'llm': '模型节点',
|
|
35
|
+
'knowledge': '知识库节点',
|
|
36
|
+
'video': '视频节点',
|
|
37
|
+
'image-text': '图文节点',
|
|
38
|
+
'input': '输入节点',
|
|
39
|
+
'if-select': '选择节点',
|
|
40
|
+
'intent': '意图识别节点',
|
|
41
|
+
'talk': '讨论节点',
|
|
42
|
+
'ask': '问答节点',
|
|
43
|
+
'text': '文本处理节点',
|
|
44
|
+
'video-caption': '视频字幕节点',
|
|
45
|
+
'summary': '章节总结节点',
|
|
46
|
+
'loop': '循环节点',
|
|
47
|
+
'skill': '技能节点',
|
|
48
|
+
'skillBase': '通用技能节点',
|
|
49
|
+
'break': '终止循环节点',
|
|
50
|
+
'http': 'HTTP节点',
|
|
51
|
+
'esKnowledge': '知识库节点',
|
|
52
|
+
'mcp': 'MCP节点'
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// 根据 moduleType 和 status 生成 toolName
|
|
56
|
+
export var getToolNameByStatus = function getToolNameByStatus(moduleType, status) {
|
|
57
|
+
// thinking 类型定制文案
|
|
58
|
+
if (moduleType === 'thinking') {
|
|
59
|
+
if (status === 'STARTED') {
|
|
60
|
+
return '开始分析问题';
|
|
61
|
+
} else if (status === 'RUNNING') {
|
|
62
|
+
return '正在分析问题';
|
|
63
|
+
} else if (status === 'COMPLETED') {
|
|
64
|
+
return '已完成分析';
|
|
65
|
+
}
|
|
66
|
+
return '深度思考';
|
|
67
|
+
}
|
|
68
|
+
var baseName = MODULE_TYPE_NAMES[moduleType] || moduleType;
|
|
69
|
+
if (!status) {
|
|
70
|
+
return baseName;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// 根据状态生成描述
|
|
74
|
+
if (status === 'STARTED') {
|
|
75
|
+
return "\u5F00\u59CB\u8FD0\u884C".concat(baseName);
|
|
76
|
+
} else if (status === 'COMPLETED') {
|
|
77
|
+
return "".concat(baseName, "\u8FD0\u884C\u5B8C\u6210");
|
|
78
|
+
} else if (status === 'RUNNING') {
|
|
79
|
+
return "".concat(baseName, "\u8FD0\u884C\u4E2D");
|
|
80
|
+
} else if (status === 'PENDING') {
|
|
81
|
+
return "".concat(baseName, "\u7B49\u5F85\u4E2D");
|
|
82
|
+
} else if (status === 'FAILED') {
|
|
83
|
+
return "".concat(baseName, "\u8FD0\u884C\u5931\u8D25");
|
|
84
|
+
} else {
|
|
85
|
+
return baseName;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
18
88
|
/**
|
|
19
89
|
* 处理流式聊天逻辑
|
|
20
90
|
*/
|
|
@@ -65,6 +135,8 @@ export var useChatStream = function useChatStream(platform) {
|
|
|
65
135
|
onComplete,
|
|
66
136
|
onErrorComplete,
|
|
67
137
|
onMCPToolsStream,
|
|
138
|
+
onToolStream,
|
|
139
|
+
onArtifactStream,
|
|
68
140
|
signal,
|
|
69
141
|
currentLastEventId,
|
|
70
142
|
url,
|
|
@@ -78,7 +150,7 @@ export var useChatStream = function useChatStream(platform) {
|
|
|
78
150
|
callbacks = _args.length > 2 && _args[2] !== undefined ? _args[2] : {};
|
|
79
151
|
method = _args.length > 3 ? _args[3] : undefined;
|
|
80
152
|
requestUrl = _args.length > 4 ? _args[4] : undefined;
|
|
81
|
-
onSseOpen = callbacks.onSseOpen, onDataReceived = callbacks.onDataReceived, onComplete = callbacks.onComplete, onErrorComplete = callbacks.onErrorComplete, onMCPToolsStream = callbacks.onMCPToolsStream; // 中止之前的请求
|
|
153
|
+
onSseOpen = callbacks.onSseOpen, onDataReceived = callbacks.onDataReceived, onComplete = callbacks.onComplete, onErrorComplete = callbacks.onErrorComplete, onMCPToolsStream = callbacks.onMCPToolsStream, onToolStream = callbacks.onToolStream, onArtifactStream = callbacks.onArtifactStream; // 中止之前的请求
|
|
82
154
|
if (esAbortRef.current) {
|
|
83
155
|
esAbortRef.current.abort();
|
|
84
156
|
}
|
|
@@ -131,6 +203,7 @@ export var useChatStream = function useChatStream(platform) {
|
|
|
131
203
|
dispatch(setIsMsgRecieving({
|
|
132
204
|
isMsgRecieving: true
|
|
133
205
|
}));
|
|
206
|
+
console.log('[onmessage] 收到消息:', event.data);
|
|
134
207
|
if (!(event !== null && event !== void 0 && event.data) || ignoreOnMessageRef.current) {
|
|
135
208
|
return;
|
|
136
209
|
}
|
|
@@ -142,7 +215,7 @@ export var useChatStream = function useChatStream(platform) {
|
|
|
142
215
|
if (messageId && event.id) {
|
|
143
216
|
saveLastEventId(messageId, event.id);
|
|
144
217
|
}
|
|
145
|
-
if (data.status === 0 && data.result &&
|
|
218
|
+
if (data.status === 0 && data.result && PROCESSABLE_MODULE_TYPES.includes(_dataObj.moduleType) && !_dataObj.ERROR) {
|
|
146
219
|
if (_dataObj.status === 'RUNNING' && _dataObj.moduleType === 'end') {
|
|
147
220
|
if (_dataObj.content && !_dataObj.reasoningContent) {
|
|
148
221
|
fullResponse += _dataObj.content;
|
|
@@ -155,15 +228,32 @@ export var useChatStream = function useChatStream(platform) {
|
|
|
155
228
|
if (_dataObj.moduleType === 'tool_call') {
|
|
156
229
|
onMCPToolsStream === null || onMCPToolsStream === void 0 || onMCPToolsStream(_dataObj);
|
|
157
230
|
}
|
|
231
|
+
|
|
232
|
+
// 工具调用
|
|
233
|
+
if (TOOL_MODULE_TYPES.includes(_dataObj.moduleType)) {
|
|
234
|
+
onToolStream === null || onToolStream === void 0 || onToolStream(_dataObj);
|
|
235
|
+
}
|
|
236
|
+
// 生成产物
|
|
237
|
+
if (_dataObj.moduleType === 'artifact' && _dataObj.status === 'COMPLETED') {
|
|
238
|
+
onArtifactStream === null || onArtifactStream === void 0 || onArtifactStream(_dataObj);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// 问答确认
|
|
158
242
|
if ((_dataObj.moduleType === 'ask' || _dataObj.moduleType === 'skill') && _dataObj.status === 'PENDING') {
|
|
159
243
|
onComplete === null || onComplete === void 0 || onComplete(_dataObj, _dataObj.moduleType);
|
|
160
244
|
return;
|
|
161
245
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
onComplete === null || onComplete === void 0 || onComplete(
|
|
246
|
+
// 确认模式
|
|
247
|
+
if (_dataObj.moduleType === 'user_confirm' && _dataObj.status === 'ASKING') {
|
|
248
|
+
onComplete === null || onComplete === void 0 || onComplete(_dataObj, _dataObj.moduleType);
|
|
165
249
|
return;
|
|
166
250
|
}
|
|
251
|
+
} else if (_dataObj.moduleType === 'agent' && _dataObj.status === 'STARTED') {
|
|
252
|
+
onToolStream === null || onToolStream === void 0 || onToolStream(_dataObj);
|
|
253
|
+
} else if (_dataObj.moduleType === 'agent' && _dataObj.status === 'COMPLETED' || _dataObj.type === 'WORKFLOW_COMPLETED') {
|
|
254
|
+
removeLastEventId(messageId);
|
|
255
|
+
onComplete === null || onComplete === void 0 || onComplete(fullResponse, 'end', reasoningResponse, _dataObj);
|
|
256
|
+
return;
|
|
167
257
|
} else if (_dataObj.ERROR || _dataObj.moduleType === 'FAILED') {
|
|
168
258
|
var isRefresh = parseInt(_dataObj.status, 10) === 10002026;
|
|
169
259
|
if (isRefresh) {
|
|
@@ -207,6 +297,7 @@ export var useChatStream = function useChatStream(platform) {
|
|
|
207
297
|
dispatch(setIsMsgRecieving({
|
|
208
298
|
isMsgRecieving: false
|
|
209
299
|
}));
|
|
300
|
+
esAbortRef.current = null; // 清空,避免残留
|
|
210
301
|
console.log('流式结束');
|
|
211
302
|
}
|
|
212
303
|
}));
|
|
@@ -33,7 +33,7 @@ declare const useCommonChatAPI: (props: IHookProps) => {
|
|
|
33
33
|
getContentMessageList: (pageIndex?: number, curPageSize?: number) => Promise<void>;
|
|
34
34
|
hasMore: React.MutableRefObject<boolean>;
|
|
35
35
|
loadMore: () => void;
|
|
36
|
-
handleSend: (val: string, agent?: any, isSystemAuto?: boolean, conversationId?: number) => Promise<void>;
|
|
36
|
+
handleSend: (val: string, agent?: any, isSystemAuto?: boolean, conversationId?: number, skipCreateNewMessage?: boolean) => Promise<void>;
|
|
37
37
|
scrollBottomForce: (animate?: boolean | undefined) => void;
|
|
38
38
|
showBackBottom: boolean;
|
|
39
39
|
isScrolling: boolean;
|