@ai-group/chat-sdk 0.2.5 → 0.2.8

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.
Files changed (157) hide show
  1. package/README.md +93 -214
  2. package/dist/cjs/assets/arrow-down.png +0 -0
  3. package/dist/cjs/assets/arrow-up.png +0 -0
  4. package/dist/cjs/assets/chatKnowledge.png +0 -0
  5. package/dist/cjs/assets/completed-black.png +0 -0
  6. package/dist/cjs/assets/completed.png +0 -0
  7. package/dist/cjs/assets/document-black.png +0 -0
  8. package/dist/cjs/assets/document.png +0 -0
  9. package/dist/cjs/assets/document.svg +16 -0
  10. package/dist/cjs/assets/empty.png +0 -0
  11. package/dist/cjs/assets/group.png +0 -0
  12. package/dist/cjs/assets/qa-black.png +0 -0
  13. package/dist/cjs/assets/qa.png +0 -0
  14. package/dist/cjs/assets/skillNo-black.png +0 -0
  15. package/dist/cjs/assets/skillNo.png +0 -0
  16. package/dist/cjs/assets/tools-black.png +0 -0
  17. package/dist/cjs/assets/tools.png +0 -0
  18. package/dist/cjs/assets/user.png +0 -0
  19. package/dist/cjs/client/base.d.ts +9 -0
  20. package/dist/cjs/client/base.js +18 -0
  21. package/dist/cjs/client/base.js.map +7 -0
  22. package/dist/cjs/client/restClient.d.ts +0 -0
  23. package/dist/cjs/client/restClient.js +1 -0
  24. package/dist/cjs/client/restClient.js.map +7 -0
  25. package/dist/cjs/client/wsClient.d.ts +0 -0
  26. package/dist/cjs/client/wsClient.js +1 -0
  27. package/dist/cjs/client/wsClient.js.map +7 -0
  28. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.d.ts +10 -0
  29. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js +484 -0
  30. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js.map +7 -0
  31. package/dist/cjs/components/XAiChatbot/index.d.ts +12 -0
  32. package/dist/cjs/components/XAiChatbot/index.js +365 -0
  33. package/dist/cjs/components/XAiChatbot/index.js.map +7 -0
  34. package/dist/cjs/components/XAiChatbot/styles.d.ts +72 -0
  35. package/dist/cjs/components/XAiChatbot/styles.js +426 -0
  36. package/dist/cjs/components/XAiChatbot/styles.js.map +7 -0
  37. package/dist/cjs/components/XAiProvider/XAiProvider.stories.d.ts +7 -0
  38. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +127 -0
  39. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +7 -0
  40. package/dist/cjs/components/XAiProvider/index.d.ts +4 -0
  41. package/dist/cjs/components/XAiProvider/index.js +115 -0
  42. package/dist/cjs/components/XAiProvider/index.js.map +7 -0
  43. package/dist/cjs/components/XAiSDK.d.ts +10 -0
  44. package/dist/cjs/components/XAiSDK.js +53 -0
  45. package/dist/cjs/components/XAiSDK.js.map +7 -0
  46. package/dist/cjs/components/XAiWebSDKWrapper.d.ts +9 -0
  47. package/dist/cjs/components/XAiWebSDKWrapper.js +70 -0
  48. package/dist/cjs/components/XAiWebSDKWrapper.js.map +7 -0
  49. package/dist/cjs/context/AiProviderContext.d.ts +12 -0
  50. package/dist/cjs/context/AiProviderContext.js +74 -0
  51. package/dist/cjs/context/AiProviderContext.js.map +7 -0
  52. package/dist/cjs/context/ThemeContext.d.ts +20 -0
  53. package/dist/cjs/context/ThemeContext.js +37 -0
  54. package/dist/cjs/context/ThemeContext.js.map +7 -0
  55. package/dist/cjs/hooks/useAgentGenerator.d.ts +72 -0
  56. package/dist/cjs/hooks/useAgentGenerator.js +487 -0
  57. package/dist/cjs/hooks/useAgentGenerator.js.map +7 -0
  58. package/dist/cjs/hooks/useEventStreamRequest.d.ts +30 -0
  59. package/dist/cjs/hooks/useEventStreamRequest.js +188 -0
  60. package/dist/cjs/hooks/useEventStreamRequest.js.map +7 -0
  61. package/dist/cjs/hooks/useProviderContext.d.ts +33 -0
  62. package/dist/cjs/hooks/useProviderContext.js +105 -0
  63. package/dist/cjs/hooks/useProviderContext.js.map +7 -0
  64. package/dist/cjs/hooks/useXAiSDK.d.ts +14 -0
  65. package/dist/cjs/hooks/useXAiSDK.js +75 -0
  66. package/dist/cjs/hooks/useXAiSDK.js.map +7 -0
  67. package/dist/cjs/index.d.ts +9 -0
  68. package/dist/cjs/index.js +61 -0
  69. package/dist/cjs/index.js.map +7 -0
  70. package/dist/cjs/services/api.d.ts +69 -0
  71. package/dist/cjs/services/api.js +49 -0
  72. package/dist/cjs/services/api.js.map +7 -0
  73. package/dist/cjs/styles/common.d.ts +64 -0
  74. package/dist/cjs/styles/common.js +144 -0
  75. package/dist/cjs/styles/common.js.map +7 -0
  76. package/dist/cjs/styles/markdown.d.ts +3 -0
  77. package/dist/cjs/styles/markdown.js +193 -0
  78. package/dist/cjs/styles/markdown.js.map +7 -0
  79. package/dist/cjs/types/XAiChatbot.d.ts +159 -0
  80. package/dist/cjs/types/XAiChatbot.js +18 -0
  81. package/dist/cjs/types/XAiChatbot.js.map +7 -0
  82. package/dist/cjs/types/XAiMessage.d.ts +121 -0
  83. package/dist/cjs/types/XAiMessage.js +55 -0
  84. package/dist/cjs/types/XAiMessage.js.map +7 -0
  85. package/dist/cjs/types/XAiProvider.d.ts +46 -0
  86. package/dist/cjs/types/XAiProvider.js +50 -0
  87. package/dist/cjs/types/XAiProvider.js.map +7 -0
  88. package/dist/cjs/types/index.d.ts +3 -0
  89. package/dist/cjs/types/index.js +28 -0
  90. package/dist/cjs/types/index.js.map +7 -0
  91. package/dist/cjs/types/mdx.d.ts +18 -0
  92. package/dist/cjs/utils/chat.d.ts +34 -0
  93. package/dist/cjs/utils/chat.js +1 -0
  94. package/dist/cjs/utils/chat.js.map +7 -0
  95. package/dist/cjs/utils/index.d.ts +2 -0
  96. package/dist/cjs/utils/index.js +49 -0
  97. package/dist/cjs/utils/index.js.map +7 -0
  98. package/dist/cjs/utils/providerManager.d.ts +22 -0
  99. package/dist/cjs/utils/providerManager.js +73 -0
  100. package/dist/cjs/utils/providerManager.js.map +7 -0
  101. package/dist/cjs/utils/request.d.ts +78 -0
  102. package/dist/cjs/utils/request.example.d.ts +39 -0
  103. package/dist/cjs/utils/request.example.js +211 -0
  104. package/dist/cjs/utils/request.example.js.map +7 -0
  105. package/dist/cjs/utils/request.js +231 -0
  106. package/dist/cjs/utils/request.js.map +7 -0
  107. package/dist/cjs/utils/umdEntry.d.ts +14 -0
  108. package/dist/cjs/utils/umdEntry.js +97 -0
  109. package/dist/cjs/utils/umdEntry.js.map +7 -0
  110. package/dist/esm/assets/user.png +0 -0
  111. package/dist/esm/client/base.d.ts +9 -0
  112. package/dist/esm/client/restClient.d.ts +0 -0
  113. package/dist/esm/client/wsClient.d.ts +0 -0
  114. package/dist/esm/components/XAiChatbot/XAiChatbot.stories.d.ts +10 -0
  115. package/dist/esm/components/XAiChatbot/index.d.ts +12 -0
  116. package/dist/esm/components/XAiChatbot/index.js +17 -11
  117. package/dist/esm/components/XAiChatbot/index.js.map +1 -1
  118. package/dist/esm/components/XAiChatbot/styles.d.ts +72 -0
  119. package/dist/esm/components/XAiChatbot/styles.js +37 -38
  120. package/dist/esm/components/XAiChatbot/styles.js.map +1 -1
  121. package/dist/esm/components/XAiProvider/XAiProvider.stories.d.ts +7 -0
  122. package/dist/esm/components/XAiProvider/index.d.ts +4 -0
  123. package/dist/esm/components/XAiProvider/index.js +8 -1
  124. package/dist/esm/components/XAiProvider/index.js.map +1 -1
  125. package/dist/esm/components/XAiSDK.d.ts +10 -0
  126. package/dist/esm/components/XAiWebSDKWrapper.d.ts +9 -0
  127. package/dist/esm/components/XAiWebSDKWrapper.js +4 -1
  128. package/dist/esm/components/XAiWebSDKWrapper.js.map +1 -1
  129. package/dist/esm/context/AiProviderContext.d.ts +12 -0
  130. package/dist/esm/context/ThemeContext.d.ts +20 -0
  131. package/dist/esm/hooks/useAgentGenerator.d.ts +72 -0
  132. package/dist/esm/hooks/useAgentGenerator.js +113 -39
  133. package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
  134. package/dist/esm/hooks/useEventStreamRequest.d.ts +30 -0
  135. package/dist/esm/hooks/useProviderContext.d.ts +33 -0
  136. package/dist/esm/hooks/useXAiSDK.d.ts +14 -0
  137. package/dist/esm/index.d.ts +9 -0
  138. package/dist/esm/services/api.d.ts +69 -0
  139. package/dist/esm/services/api.js.map +1 -1
  140. package/dist/esm/styles/common.d.ts +64 -0
  141. package/dist/esm/styles/markdown.d.ts +3 -0
  142. package/dist/esm/types/XAiChatbot.d.ts +159 -0
  143. package/dist/esm/types/XAiMessage.d.ts +121 -0
  144. package/dist/esm/types/XAiProvider.d.ts +46 -0
  145. package/dist/esm/types/XAiProvider.js +7 -0
  146. package/dist/esm/types/XAiProvider.js.map +1 -1
  147. package/dist/esm/types/index.d.ts +3 -0
  148. package/dist/esm/utils/chat.d.ts +34 -0
  149. package/dist/esm/utils/index.d.ts +2 -0
  150. package/dist/esm/utils/providerManager.d.ts +22 -0
  151. package/dist/esm/utils/request.d.ts +78 -0
  152. package/dist/esm/utils/request.example.d.ts +39 -0
  153. package/dist/esm/utils/umdEntry.d.ts +14 -0
  154. package/dist/esm/utils/umdEntry.js +22 -18
  155. package/dist/esm/utils/umdEntry.js.map +1 -1
  156. package/dist/umd/chat-sdk.min.js +1 -1
  157. package/package.json +1 -1
@@ -0,0 +1,487 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/hooks/useAgentGenerator.ts
30
+ var useAgentGenerator_exports = {};
31
+ __export(useAgentGenerator_exports, {
32
+ ActionAvailability: () => ActionAvailability,
33
+ ActionType: () => ActionType,
34
+ ProcessStatus: () => ProcessStatus,
35
+ default: () => useAgentGenerator_default
36
+ });
37
+ module.exports = __toCommonJS(useAgentGenerator_exports);
38
+ var import_react = require("react");
39
+ var import_uuid = require("uuid");
40
+ var import_useEventStreamRequest = require("./useEventStreamRequest");
41
+ var import_XAiMessage = require("../types/XAiMessage");
42
+ var import_XAiProvider = require("../types/XAiProvider");
43
+ var import_request = require("../utils/request");
44
+ var import_utils = require("../utils/index");
45
+ var import_api = require("../services/api");
46
+ var import_document = __toESM(require("../assets/document.png"));
47
+ var import_completed = __toESM(require("../assets/completed.png"));
48
+ var import_completed_black = __toESM(require("../assets/completed-black.png"));
49
+ var import_document_black = __toESM(require("../assets/document-black.png"));
50
+ var import_qa = __toESM(require("../assets/qa.png"));
51
+ var import_qa_black = __toESM(require("../assets/qa-black.png"));
52
+ var import_skillNo = __toESM(require("../assets/skillNo.png"));
53
+ var import_skillNo_black = __toESM(require("../assets/skillNo-black.png"));
54
+ var import_tools = __toESM(require("../assets/tools.png"));
55
+ var import_tools_black = __toESM(require("../assets/tools-black.png"));
56
+ var ActionType = /* @__PURE__ */ ((ActionType2) => {
57
+ ActionType2["recallKnowledgeStart"] = "RECALL_KNOWLEDGE_START";
58
+ ActionType2["recallKnowledgeEnd"] = "RECALL_KNOWLEDGE_END";
59
+ ActionType2["invokeToolStart"] = "INVOKE_AGENT_TOOL_START";
60
+ ActionType2["invokeToolEnd"] = "INVOKE_AGENT_TOOL_END";
61
+ ActionType2["suggest"] = "FOLLOW_UP";
62
+ ActionType2["response"] = "RESPONSE";
63
+ ActionType2["finish"] = "FINISHED";
64
+ return ActionType2;
65
+ })(ActionType || {});
66
+ var ProcessStatus = /* @__PURE__ */ ((ProcessStatus2) => {
67
+ ProcessStatus2["start"] = "START";
68
+ ProcessStatus2["end"] = "END";
69
+ return ProcessStatus2;
70
+ })(ProcessStatus || {});
71
+ var ActionAvailability = /* @__PURE__ */ ((ActionAvailability2) => {
72
+ ActionAvailability2["disabled"] = "disabled";
73
+ ActionAvailability2["enabled"] = "enabled";
74
+ ActionAvailability2["remote"] = "remote";
75
+ return ActionAvailability2;
76
+ })(ActionAvailability || {});
77
+ var useAgentGenerator = ({
78
+ url,
79
+ token,
80
+ config,
81
+ onError,
82
+ onSuccess
83
+ }) => {
84
+ const textSpeed = 60;
85
+ const [messages, setMessages] = (0, import_react.useState)([]);
86
+ const [appInfo, setAppInfo] = (0, import_react.useState)(null);
87
+ const requestInfo = (0, import_react.useRef)({});
88
+ const { appNo, pt, tc } = config || {};
89
+ (0, import_react.useEffect)(() => {
90
+ if (url && config) {
91
+ const initConfig = async () => {
92
+ var _a;
93
+ try {
94
+ const result = await (0, import_api.fetchAppConfig)({ url, ...config });
95
+ if (result.success) {
96
+ setAppInfo(result.data);
97
+ const { enableFlag, isDeleted } = ((_a = result.data) == null ? void 0 : _a.publishDTO) || {};
98
+ if (!enableFlag) {
99
+ onError == null ? void 0 : onError({
100
+ code: import_XAiProvider.ErrorCode.APP_NOT_ENABLE,
101
+ message: "应用未启用或者已下架"
102
+ });
103
+ } else if (isDeleted === "Y") {
104
+ onError == null ? void 0 : onError({
105
+ code: import_XAiProvider.ErrorCode.APP_DELETED,
106
+ message: "应用已下架"
107
+ });
108
+ } else {
109
+ onSuccess == null ? void 0 : onSuccess(result.data);
110
+ }
111
+ } else {
112
+ onError == null ? void 0 : onError({
113
+ code: import_XAiProvider.ErrorCode.APP_NOT_FOUND,
114
+ message: (result == null ? void 0 : result.message) || "获取聊天配置失败"
115
+ });
116
+ }
117
+ } catch (error) {
118
+ console.error("获取聊天配置失败", error);
119
+ onError == null ? void 0 : onError({
120
+ code: import_XAiProvider.ErrorCode.API_ERROR,
121
+ message: "获取聊天配置失败"
122
+ });
123
+ }
124
+ };
125
+ initConfig();
126
+ }
127
+ }, [url, config]);
128
+ const { start, loading, responseData, stop } = (0, import_useEventStreamRequest.useEventStreamRequest)({
129
+ streaming: true,
130
+ textSpeed,
131
+ onClose: () => {
132
+ setTimeout(() => {
133
+ var _a, _b;
134
+ if (((_a = requestInfo.current) == null ? void 0 : _a.sensitiveWords) && ((_b = requestInfo.current) == null ? void 0 : _b.requestId)) {
135
+ import_request.request.post(url);
136
+ }
137
+ }, 500);
138
+ },
139
+ onOpen(res) {
140
+ console.log("res-----open:", res);
141
+ }
142
+ });
143
+ (0, import_react.useEffect)(() => {
144
+ if (!responseData || !responseData.content || !responseData.data)
145
+ return;
146
+ let response = responseData.data || responseData.content;
147
+ if (typeof response === "string") {
148
+ response = (0, import_utils.safeJsonParse)(response, {
149
+ action: "RESPONSE" /* response */,
150
+ data: {
151
+ contentType: "TEXT",
152
+ content: "解析响应数据时出错,请重试",
153
+ success: false,
154
+ errorMsg: "响应数据格式错误"
155
+ }
156
+ });
157
+ }
158
+ setMessages((prevMessages) => {
159
+ var _a, _b;
160
+ let newMessages = [...prevMessages];
161
+ const { action, data } = response;
162
+ const { uniqueId, contentType, content, toolType, args, knowledgeType, success = true, errorMsg } = data;
163
+ if (action === "FOLLOW_UP" /* suggest */) {
164
+ const suggestMessageIndex = messages.findIndex((item) => item.type === "SuggestionMessage");
165
+ if (suggestMessageIndex === -1) {
166
+ const newMessage = {
167
+ id: (0, import_uuid.v4)(),
168
+ type: "SuggestionMessage",
169
+ createdAt: /* @__PURE__ */ new Date(),
170
+ status: import_XAiMessage.MessageStatus.done,
171
+ role: import_XAiMessage.MessageRole.suggestion,
172
+ content: [{
173
+ key: (0, import_uuid.v4)(),
174
+ description: content
175
+ }]
176
+ };
177
+ newMessages.push(newMessage);
178
+ } else {
179
+ const suggestMsg = newMessages[suggestMessageIndex];
180
+ if (suggestMsg == null ? void 0 : suggestMsg.content) {
181
+ suggestMsg.content.push({
182
+ key: (0, import_uuid.v4)(),
183
+ description: content
184
+ });
185
+ }
186
+ }
187
+ return newMessages;
188
+ }
189
+ const lastAIMsgIndex = [...prevMessages].reverse().findIndex(
190
+ (m) => m.role === import_XAiMessage.MessageRole.assistant && m.type === "TextMessage" && (m.status === "init" || m.status === "pending")
191
+ );
192
+ const realIndex = lastAIMsgIndex === -1 ? -1 : prevMessages.length - 1 - lastAIMsgIndex;
193
+ const lastAIMsg = realIndex !== -1 ? prevMessages[realIndex] : null;
194
+ let aiMsg;
195
+ if (!lastAIMsg) {
196
+ aiMsg = {
197
+ id: (0, import_uuid.v4)(),
198
+ type: "TextMessage",
199
+ createdAt: /* @__PURE__ */ new Date(),
200
+ role: import_XAiMessage.MessageRole.assistant,
201
+ content: { text: "" },
202
+ thinks: [],
203
+ status: import_XAiMessage.MessageStatus.init
204
+ };
205
+ newMessages.push(aiMsg);
206
+ } else if (lastAIMsg.type === "TextMessage") {
207
+ aiMsg = { ...lastAIMsg };
208
+ } else if (lastAIMsg.type === "ImageMessage") {
209
+ aiMsg = void 0;
210
+ }
211
+ if (!aiMsg) {
212
+ return newMessages;
213
+ }
214
+ switch (action) {
215
+ case "RECALL_KNOWLEDGE_START" /* recallKnowledgeStart */:
216
+ aiMsg.thinks = aiMsg.thinks || [];
217
+ aiMsg.thinks.push({
218
+ id: uniqueId,
219
+ createdAt: /* @__PURE__ */ new Date(),
220
+ type: "ActionExecutionMessage",
221
+ name: knowledgeType === "DOCUMENT" ? "已搜索文档知识库" : "已搜索问答知识库",
222
+ arguments: args,
223
+ extra: {
224
+ ...data,
225
+ icon: knowledgeType === "DOCUMENT" ? import_document.default : import_qa.default,
226
+ expandIcon: knowledgeType === "DOCUMENT" ? import_document_black.default : import_qa_black.default
227
+ }
228
+ });
229
+ break;
230
+ case "RECALL_KNOWLEDGE_END" /* recallKnowledgeEnd */: {
231
+ const recallKnowledgeMsg = (_a = aiMsg.thinks) == null ? void 0 : _a.find((item) => item.id === uniqueId);
232
+ if (recallKnowledgeMsg) {
233
+ recallKnowledgeMsg.extra.cost = (data == null ? void 0 : data.cost) ? ((data == null ? void 0 : data.cost) / 1e3).toFixed(2) : 0;
234
+ }
235
+ break;
236
+ }
237
+ case "INVOKE_AGENT_TOOL_START" /* invokeToolStart */:
238
+ aiMsg.thinks = aiMsg.thinks || [];
239
+ aiMsg.thinks.push({
240
+ id: uniqueId,
241
+ createdAt: /* @__PURE__ */ new Date(),
242
+ type: "ActionExecutionMessage",
243
+ name: toolType === "SKILL" ? "已调用工作流" : "已调用工具",
244
+ arguments: args,
245
+ extra: {
246
+ ...data,
247
+ icon: toolType === "SKILL" ? import_skillNo.default : import_tools.default,
248
+ expandIcon: toolType === "SKILL" ? import_skillNo_black.default : import_tools_black.default
249
+ }
250
+ });
251
+ break;
252
+ case "INVOKE_AGENT_TOOL_END" /* invokeToolEnd */: {
253
+ const invokeToolMsg = (_b = aiMsg.thinks) == null ? void 0 : _b.find((item) => item.id === uniqueId);
254
+ if (invokeToolMsg) {
255
+ invokeToolMsg.extra.cost = (data == null ? void 0 : data.cost) ? ((data == null ? void 0 : data.cost) / 1e3).toFixed(2) : 0;
256
+ }
257
+ break;
258
+ }
259
+ case "RESPONSE" /* response */:
260
+ if (success) {
261
+ if (aiMsg.status === import_XAiMessage.MessageStatus.init) {
262
+ aiMsg.status = import_XAiMessage.MessageStatus.pending;
263
+ }
264
+ if (contentType === "TEXT" && "text" in aiMsg.content) {
265
+ aiMsg.content.text += content;
266
+ }
267
+ } else {
268
+ aiMsg.status = import_XAiMessage.MessageStatus.failed;
269
+ aiMsg.content.text = `<span style="color: red;">❌ ${errorMsg}</span>`;
270
+ }
271
+ break;
272
+ case "FINISHED" /* finish */:
273
+ aiMsg.thinks = aiMsg.thinks || [];
274
+ aiMsg.thinks.push({
275
+ id: uniqueId,
276
+ createdAt: /* @__PURE__ */ new Date(),
277
+ type: "ActionExecutionMessage",
278
+ name: "运行完毕",
279
+ extra: {
280
+ ...data,
281
+ cost: (data == null ? void 0 : data.cost) ? ((data == null ? void 0 : data.cost) / 1e3).toFixed(2) : 0,
282
+ icon: import_completed.default,
283
+ expandIcon: import_completed_black.default
284
+ }
285
+ });
286
+ aiMsg.status = import_XAiMessage.MessageStatus.done;
287
+ break;
288
+ }
289
+ if (lastAIMsg && lastAIMsg.type === "TextMessage") {
290
+ newMessages[realIndex] = aiMsg;
291
+ } else if (!lastAIMsg) {
292
+ if (newMessages.length > 0 && newMessages[newMessages.length - 1].type === "TextMessage") {
293
+ newMessages[newMessages.length - 1] = aiMsg;
294
+ } else {
295
+ newMessages = [...newMessages, aiMsg];
296
+ }
297
+ }
298
+ return newMessages;
299
+ });
300
+ }, [responseData]);
301
+ const setMessage = async (messageType, content) => {
302
+ switch (messageType) {
303
+ case "prologue": {
304
+ const prologueMessageIndex = messages.findIndex((item) => {
305
+ var _a;
306
+ return (_a = item.extra) == null ? void 0 : _a.prologue;
307
+ });
308
+ if (prologueMessageIndex === -1) {
309
+ const newMessage = {
310
+ type: "TextMessage",
311
+ id: (0, import_uuid.v4)(),
312
+ createdAt: /* @__PURE__ */ new Date(),
313
+ role: import_XAiMessage.MessageRole.assistant,
314
+ status: import_XAiMessage.MessageStatus.done,
315
+ content: {
316
+ text: content
317
+ },
318
+ extra: {
319
+ prologue: true,
320
+ noFooter: true
321
+ }
322
+ };
323
+ setMessages((prev) => [newMessage, ...prev]);
324
+ } else {
325
+ setMessages((prev) => prev.map((item) => {
326
+ var _a;
327
+ if (((_a = item.extra) == null ? void 0 : _a.prologue) && item.content && "text" in item.content) {
328
+ item.content.text = content;
329
+ }
330
+ return item;
331
+ }));
332
+ }
333
+ break;
334
+ }
335
+ case "suggest": {
336
+ const suggestMessageIndex = messages.findIndex((item) => item.type === "SuggestionMessage");
337
+ if (suggestMessageIndex === -1) {
338
+ const prologueMessageIndex = messages.findIndex((item) => {
339
+ var _a;
340
+ return (_a = item.extra) == null ? void 0 : _a.prologue;
341
+ });
342
+ const newMessage = {
343
+ id: (0, import_uuid.v4)(),
344
+ type: "SuggestionMessage",
345
+ createdAt: /* @__PURE__ */ new Date(),
346
+ status: import_XAiMessage.MessageStatus.done,
347
+ role: import_XAiMessage.MessageRole.suggestion,
348
+ content
349
+ };
350
+ if (prologueMessageIndex === -1) {
351
+ setMessages((prev) => [newMessage, ...prev]);
352
+ } else {
353
+ setMessages((prev) => {
354
+ const newMessages = [...prev];
355
+ newMessages.splice(prologueMessageIndex + 1, 0, newMessage);
356
+ return newMessages;
357
+ });
358
+ }
359
+ } else {
360
+ setMessages((prev) => prev.map((item) => {
361
+ if (item.type === "SuggestionMessage") {
362
+ item.content = content;
363
+ }
364
+ return item;
365
+ }));
366
+ }
367
+ break;
368
+ }
369
+ default:
370
+ break;
371
+ }
372
+ };
373
+ const chat = async (content) => {
374
+ const newMessage = {
375
+ type: "TextMessage",
376
+ id: (0, import_uuid.v4)(),
377
+ createdAt: /* @__PURE__ */ new Date(),
378
+ role: import_XAiMessage.MessageRole.user,
379
+ status: import_XAiMessage.MessageStatus.done,
380
+ content: {
381
+ text: content
382
+ }
383
+ };
384
+ setMessages((prev) => {
385
+ const suggestMessageIndex = messages.findIndex((item) => item.type === "SuggestionMessage");
386
+ if (suggestMessageIndex !== -1) {
387
+ prev.splice(suggestMessageIndex, 1);
388
+ }
389
+ prev.push(newMessage);
390
+ return prev;
391
+ });
392
+ start(
393
+ `${url}/appouter/${appNo}/sendMsg?pt=${pt}&tc=${tc}`,
394
+ {
395
+ appParams: {
396
+ inputs_msg: content
397
+ }
398
+ },
399
+ {
400
+ Authorization: `Bearer ${token}`
401
+ }
402
+ );
403
+ };
404
+ const reChat = () => {
405
+ setMessages((prevMessages) => {
406
+ const lastAIMsgIndex = [...prevMessages].reverse().findIndex(
407
+ (m) => m.role === import_XAiMessage.MessageRole.assistant && m.type === "TextMessage"
408
+ );
409
+ const newMessages = [...prevMessages];
410
+ if (lastAIMsgIndex !== -1) {
411
+ const realIndex = newMessages.length - 1 - lastAIMsgIndex;
412
+ newMessages.splice(realIndex, 1);
413
+ }
414
+ const suggestMessageIndex = messages.findIndex((item) => item.type === "SuggestionMessage");
415
+ if (suggestMessageIndex !== -1) {
416
+ newMessages.splice(suggestMessageIndex, 1);
417
+ }
418
+ const lastUserMsg = [...newMessages].reverse().find(
419
+ (m) => m.role === import_XAiMessage.MessageRole.user && m.type === "TextMessage"
420
+ );
421
+ if (lastUserMsg && lastUserMsg.content && typeof lastUserMsg.content.text === "string") {
422
+ chat(lastUserMsg.content.text);
423
+ }
424
+ return newMessages;
425
+ });
426
+ };
427
+ const stopChat = () => {
428
+ stop();
429
+ setMessages((prevMessages) => {
430
+ const newMessages = [...prevMessages];
431
+ newMessages.forEach((m) => {
432
+ if (m.status === import_XAiMessage.MessageStatus.pending) {
433
+ m.status = import_XAiMessage.MessageStatus.done;
434
+ } else if (m.status === import_XAiMessage.MessageStatus.init) {
435
+ if (m.type === "TextMessage") {
436
+ m.content.text = '<span style="color: #cbcbcb;">用户已取消</span>';
437
+ }
438
+ m.status = import_XAiMessage.MessageStatus.done;
439
+ }
440
+ });
441
+ return newMessages;
442
+ });
443
+ };
444
+ (0, import_react.useEffect)(() => {
445
+ if (appInfo) {
446
+ const { onboardingInfo = {} } = appInfo;
447
+ const { suggested_questions = [], prologue = "" } = onboardingInfo || {};
448
+ if (prologue) {
449
+ setMessage("prologue", prologue);
450
+ } else {
451
+ setMessages((prev) => prev.filter((item) => {
452
+ var _a;
453
+ return !((_a = item.extra) == null ? void 0 : _a.prologue);
454
+ }));
455
+ }
456
+ const formatSuggests = suggested_questions.filter((item) => item);
457
+ if (formatSuggests.length > 0) {
458
+ const suggestMessages = formatSuggests.map((item, index) => ({
459
+ key: index + 1,
460
+ description: item
461
+ }));
462
+ setMessage("suggest", suggestMessages);
463
+ } else {
464
+ setMessages((prev) => prev.filter((item) => !(item.type === "SuggestionMessage")));
465
+ }
466
+ }
467
+ }, [appInfo]);
468
+ return {
469
+ appInfo,
470
+ messages,
471
+ loading,
472
+ content: responseData.content,
473
+ reChat,
474
+ chat,
475
+ setMessage,
476
+ setMessages,
477
+ stopChat
478
+ };
479
+ };
480
+ var useAgentGenerator_default = useAgentGenerator;
481
+ // Annotate the CommonJS export names for ESM import in node:
482
+ 0 && (module.exports = {
483
+ ActionAvailability,
484
+ ActionType,
485
+ ProcessStatus
486
+ });
487
+ //# sourceMappingURL=useAgentGenerator.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/useAgentGenerator.ts"],
4
+ "sourcesContent": ["import { useState, useEffect, useRef } from 'react';\nimport { v4 as uuidV4 } from 'uuid';\nimport { useEventStreamRequest } from '@/hooks/useEventStreamRequest';\nimport { MessageRole, MessageStatus, TextMessage, SuggestionMessage, Messages } from '@/types/XAiMessage';\nimport { Error, ErrorCode } from '@/types/XAiProvider';\nimport { request } from '@/utils/request';\nimport { safeJsonParse } from '@/utils/index';\nimport { fetchAppConfig } from '@/services/api';\n// 图标\nimport documentIcon from '@/assets/document.png';\nimport completedIcon from '@/assets/completed.png';\nimport completedExpandIcon from '@/assets/completed-black.png';\nimport documentExpandIcon from '@/assets/document-black.png';\nimport qaIcon from '@/assets/qa.png';\nimport qaExpandIcon from '@/assets/qa-black.png';\nimport skillNoIcon from '@/assets/skillNo.png';\nimport skillNoExpandIcon from '@/assets/skillNo-black.png';\nimport toolIcon from '@/assets/tools.png';\nimport toolExpandIcon from '@/assets/tools-black.png';\n\nexport type ContentType = 'TEXT' | 'IMAGE' | 'FILE';\n\nexport interface ImageUrl {\n url: string;\n name: string;\n}\n\nexport interface FileUrl {\n url: string;\n fileName: string;\n suffix: string;\n}\n\nexport interface Content {\n text?: string;\n imageUrl?: ImageUrl;\n fileUrl?: FileUrl;\n}\n\nexport interface ContentDef {\n description: string;\n contentType: ContentType;\n content: Content;\n}\n// contents 类型\nexport type Contents = ContentDef[];\n\n// —————————————— 接口字段定义 ————————————\nexport enum ActionType {\n recallKnowledgeStart = 'RECALL_KNOWLEDGE_START', // 知识库召回开始\n recallKnowledgeEnd = 'RECALL_KNOWLEDGE_END', // 知识库召回结束\n invokeToolStart = 'INVOKE_AGENT_TOOL_START', // 开始调用工具\n invokeToolEnd = 'INVOKE_AGENT_TOOL_END', // 调用工具完成\n suggest = 'FOLLOW_UP', // 用户提示\n response = 'RESPONSE', // 响应\n finish = 'FINISHED', // 结束\n}\n\nexport enum ProcessStatus {\n start = 'START',\n end = 'END',\n}\n\nexport enum ActionAvailability {\n disabled = 'disabled', // 不可用\n enabled = 'enabled', // 可用\n remote = 'remote', // 远程可用\n}\n\nexport type ThinkStep = any; // 临时定义,后续可完善\n\n/**\n* 工具/动作定义\n*/\nexport interface Action {\n name: string; // 名称\n description: string; // 描述\n jsonSchema: string; // 参数JSON Schema\n available?: ActionAvailability; // 可用性\n error?: Error; // 错误信息\n}\n\nexport interface UseAgentGeneratorProps {\n url: string;\n token: string;\n config: any;\n onError?: (error: Error) => void;\n onSuccess?: (appInfo: any) => void;\n}\nconst useAgentGenerator = ({\n url,\n token,\n config,\n onError,\n onSuccess,\n}: UseAgentGeneratorProps) => {\n const textSpeed = 60;\n\n const [messages, setMessages] = useState<Messages[]>([]);\n const [appInfo, setAppInfo] = useState<any>(null);\n const requestInfo = useRef<{ requestId?: string; sensitiveWords?: string[] }>({});\n\n const { appNo, pt, tc } = config || {};\n\n // 初始化时获取配置\n useEffect(() => {\n if (url && config) {\n const initConfig = async () => {\n try {\n const result = await fetchAppConfig({ url, ...config });\n if (result.success) {\n setAppInfo(result.data);\n\n const { enableFlag, isDeleted } = result.data?.publishDTO || {};\n if (!enableFlag) {\n onError?.({\n code: ErrorCode.APP_NOT_ENABLE,\n message: '应用未启用或者已下架',\n });\n } else if (isDeleted === 'Y') {\n onError?.({\n code: ErrorCode.APP_DELETED,\n message: '应用已下架',\n });\n } else {\n onSuccess?.(result.data);\n }\n } else {\n onError?.({\n code: ErrorCode.APP_NOT_FOUND,\n message: result?.message || '获取聊天配置失败',\n });\n }\n } catch (error) {\n console.error('获取聊天配置失败', error);\n onError?.({\n code: ErrorCode.API_ERROR,\n message: '获取聊天配置失败',\n });\n }\n };\n initConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url, config]);\n\n const { start, loading, responseData, stop } = useEventStreamRequest({\n streaming: true,\n textSpeed,\n onClose: () => {\n // close的时机有可能在setMessages之前,所以需要延迟一下\n setTimeout(() => {\n if (requestInfo.current?.sensitiveWords && requestInfo.current?.requestId) {\n request.post(url);\n }\n }, 500);\n },\n onOpen(res) {\n console.log('res-----open:', res);\n },\n });\n\n // 数据更新\n useEffect(() => {\n if (!responseData || !responseData.content || !responseData.data) return;\n\n let response = responseData.data || responseData.content;\n if (typeof response === 'string') {\n response = safeJsonParse(response, {\n action: ActionType.response,\n data: {\n contentType: 'TEXT',\n content: '解析响应数据时出错,请重试',\n success: false,\n errorMsg: '响应数据格式错误',\n },\n });\n }\n\n setMessages((prevMessages) => {\n let newMessages = [...prevMessages];\n // 消息类型判断\n const { action, data } = response;\n const { uniqueId, contentType, content, toolType, args, knowledgeType, success = true, errorMsg } = data;\n\n // 建议类信息 特殊处理\n if (action === ActionType.suggest) {\n const suggestMessageIndex = messages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestMessageIndex === -1) {\n const newMessage: SuggestionMessage = {\n id: uuidV4(),\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content: [{\n key: uuidV4(),\n description: content,\n }],\n };\n newMessages.push(newMessage);\n } else {\n const suggestMsg = newMessages[suggestMessageIndex] as SuggestionMessage;\n if (suggestMsg?.content) {\n suggestMsg.content.push({\n key: uuidV4(),\n description: content,\n });\n }\n }\n return newMessages;\n }\n\n // 找到最后一条 AI 消息\n const lastAIMsgIndex = [...prevMessages].reverse().findIndex(\n (m) => m.role === MessageRole.assistant && m.type === 'TextMessage' && (m.status === 'init' || m.status === 'pending'),\n );\n const realIndex = lastAIMsgIndex === -1 ? -1 : prevMessages.length - 1 - lastAIMsgIndex;\n const lastAIMsg = realIndex !== -1 ? prevMessages[realIndex] : null;\n\n let aiMsg: TextMessage | undefined;\n\n if (!lastAIMsg) {\n aiMsg = {\n id: uuidV4(),\n type: 'TextMessage',\n createdAt: new Date(),\n role: MessageRole.assistant,\n content: { text: '' },\n thinks: [],\n status: MessageStatus.init,\n };\n newMessages.push(aiMsg);\n } else if (lastAIMsg.type === 'TextMessage') {\n aiMsg = { ...lastAIMsg };\n } else if (lastAIMsg.type === 'ImageMessage') {\n aiMsg = undefined;\n }\n\n // 如果 aiMsg 为 undefined,则跳过处理\n if (!aiMsg) {\n return newMessages;\n }\n\n switch (action) {\n case ActionType.recallKnowledgeStart:\n aiMsg.thinks = aiMsg.thinks || [];\n aiMsg.thinks.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: knowledgeType === 'DOCUMENT' ? '已搜索文档知识库' : '已搜索问答知识库',\n arguments: args,\n extra: {\n ...data,\n icon: knowledgeType === 'DOCUMENT' ? documentIcon : qaIcon,\n expandIcon: knowledgeType === 'DOCUMENT' ? documentExpandIcon : qaExpandIcon,\n },\n });\n break;\n case ActionType.recallKnowledgeEnd: {\n // 需要给之前的recallKnowledgeStart添加cost - 通过uniqueId关联\n const recallKnowledgeMsg = aiMsg.thinks?.find((item) => item.id === uniqueId);\n if (recallKnowledgeMsg) {\n recallKnowledgeMsg.extra.cost = data?.cost ? (data?.cost / 1000).toFixed(2) : 0;\n }\n break;\n }\n case ActionType.invokeToolStart:\n aiMsg.thinks = aiMsg.thinks || [];\n aiMsg.thinks.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: toolType === 'SKILL' ? '已调用工作流' : '已调用工具',\n arguments: args,\n extra: {\n ...data,\n icon: toolType === 'SKILL' ? skillNoIcon : toolIcon,\n expandIcon: toolType === 'SKILL' ? skillNoExpandIcon : toolExpandIcon,\n },\n });\n break;\n case ActionType.invokeToolEnd: {\n // 需要给之前的invokeToolStart添加cost - 通过uniqueId关联\n const invokeToolMsg = aiMsg.thinks?.find((item) => item.id === uniqueId);\n if (invokeToolMsg) {\n invokeToolMsg.extra.cost = data?.cost ? (data?.cost / 1000).toFixed(2) : 0;\n }\n break;\n }\n case ActionType.response:\n if (success) {\n // 正常渲染\n if (aiMsg.status === MessageStatus.init) {\n aiMsg.status = MessageStatus.pending;\n }\n if (contentType === 'TEXT' && 'text' in aiMsg.content) {\n aiMsg.content.text += content;\n }\n } else {\n // 调用失败\n aiMsg.status = MessageStatus.failed;\n aiMsg.content.text = `<span style=\"color: red;\">❌ ${errorMsg}</span>`;\n }\n break;\n case ActionType.finish:\n aiMsg.thinks = aiMsg.thinks || [];\n aiMsg.thinks.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: '运行完毕',\n extra: {\n ...data,\n cost: data?.cost ? (data?.cost / 1000).toFixed(2) : 0,\n icon: completedIcon,\n expandIcon: completedExpandIcon,\n },\n });\n aiMsg.status = MessageStatus.done;\n break;\n // 其他类型略\n }\n\n // 更新消息数组\n if (lastAIMsg && lastAIMsg.type === 'TextMessage') {\n newMessages[realIndex] = aiMsg;\n } else if (!lastAIMsg) {\n // 只有 newMessages 最后一条是 TextMessage 时才替换,否则 push\n if (newMessages.length > 0 && newMessages[newMessages.length - 1].type === 'TextMessage') {\n newMessages[newMessages.length - 1] = aiMsg;\n } else {\n // 只 push TextMessage,不替换非 TextMessage\n newMessages = [...newMessages, aiMsg];\n }\n }\n return newMessages;\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [responseData]);\n\n // 添加对话(非普通对话)\n const setMessage = async (messageType: string, content: any) => {\n switch (messageType) {\n case 'prologue': {\n const prologueMessageIndex = messages.findIndex((item) => item.extra?.prologue);\n if (prologueMessageIndex === -1) {\n const newMessage: Messages = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: new Date(),\n role: MessageRole.assistant,\n status: MessageStatus.done,\n content: {\n text: content,\n },\n extra: {\n prologue: true,\n noFooter: true,\n },\n };\n setMessages((prev) => [newMessage, ...prev]);\n } else {\n setMessages((prev) => prev.map((item) => {\n if (item.extra?.prologue && item.content && 'text' in item.content) {\n item.content.text = content;\n }\n return item;\n }));\n }\n break;\n }\n case 'suggest': {\n const suggestMessageIndex = messages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestMessageIndex === -1) {\n const prologueMessageIndex = messages.findIndex((item) => item.extra?.prologue);\n const newMessage: Messages = {\n id: uuidV4(),\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content,\n };\n if (prologueMessageIndex === -1) {\n // 如果没有开场白,则插入到最前面\n setMessages((prev) => [newMessage, ...prev]);\n } else {\n // 如果有开场白,则插到开场白后面\n setMessages((prev) => {\n const newMessages = [...prev];\n newMessages.splice(prologueMessageIndex + 1, 0, newMessage);\n return newMessages;\n });\n }\n } else {\n setMessages((prev) => prev.map((item) => {\n if (item.type === 'SuggestionMessage') {\n item.content = content;\n }\n return item;\n }));\n }\n break;\n }\n default:\n break;\n }\n };\n\n // 简单对话\n const chat = async (content: any) => {\n const newMessage: Messages = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: new Date(),\n role: MessageRole.user,\n status: MessageStatus.done,\n content: {\n text: content,\n },\n };\n\n setMessages((prev) => {\n // 若存在对话建议,先删除对话建议\n const suggestMessageIndex = messages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestMessageIndex !== -1) {\n prev.splice(suggestMessageIndex, 1);\n }\n // 插入用户消息\n prev.push(newMessage);\n return prev;\n });\n\n start(\n `${url}/appouter/${appNo}/sendMsg?pt=${pt}&tc=${tc}`,\n {\n appParams: {\n inputs_msg: content,\n },\n },\n {\n Authorization: `Bearer ${token}`,\n },\n );\n };\n\n // 重新生成方法\n const reChat = () => {\n setMessages((prevMessages) => {\n // 1. 删除最新一条 AI 消息\n const lastAIMsgIndex = [...prevMessages].reverse().findIndex(\n (m) => m.role === MessageRole.assistant && m.type === 'TextMessage',\n );\n const newMessages = [...prevMessages];\n if (lastAIMsgIndex !== -1) {\n const realIndex = newMessages.length - 1 - lastAIMsgIndex;\n newMessages.splice(realIndex, 1);\n }\n\n // 2. 若存在对话建议,先删除对话建议\n const suggestMessageIndex = messages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestMessageIndex !== -1) {\n newMessages.splice(suggestMessageIndex, 1);\n }\n\n // 3. 找到最新一条用户消息,且类型为 TextMessage\n const lastUserMsg = [...newMessages].reverse().find(\n (m) => m.role === MessageRole.user && m.type === 'TextMessage',\n ) as TextMessage | undefined;\n if (lastUserMsg && lastUserMsg.content && typeof lastUserMsg.content.text === 'string') {\n // 重新发起 chat\n chat(lastUserMsg.content.text);\n }\n\n return newMessages;\n });\n };\n\n const stopChat = () => {\n stop();\n setMessages((prevMessages) => {\n // 找到我所有进行中的消息,并设置为结束\n const newMessages = [...prevMessages];\n newMessages.forEach((m) => {\n if (m.status === MessageStatus.pending) {\n m.status = MessageStatus.done;\n } else if (m.status === MessageStatus.init) {\n if (m.type === 'TextMessage') {\n m.content.text = '<span style=\"color: #cbcbcb;\">用户已取消</span>';\n }\n m.status = MessageStatus.done;\n }\n });\n return newMessages;\n });\n };\n\n // 初始化应用\n useEffect(() => {\n if (appInfo) {\n const { onboardingInfo = {} } = appInfo;\n // eslint-disable-next-line camelcase\n const { suggested_questions = [], prologue = '' } = onboardingInfo || {};\n\n if (prologue) {\n setMessage('prologue', prologue);\n } else {\n setMessages((prev) => prev.filter((item) => !item.extra?.prologue));\n }\n\n // 过滤空内容\n const formatSuggests = suggested_questions.filter((item: string) => item);\n\n if (formatSuggests.length > 0) {\n const suggestMessages = formatSuggests.map((item: string, index: number) => ({\n key: index + 1,\n description: item,\n }));\n setMessage('suggest', suggestMessages);\n } else {\n setMessages((prev) => prev.filter((item) => !(item.type === 'SuggestionMessage')));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [appInfo]);\n\n return {\n appInfo,\n messages,\n loading,\n content: responseData.content,\n reChat,\n chat,\n setMessage,\n setMessages,\n stopChat,\n };\n};\n\nexport default useAgentGenerator;\n"],
5
+ "mappings": "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",
6
+ "names": ["ActionType", "ProcessStatus", "ActionAvailability", "uuidV4", "documentIcon", "qaIcon", "documentExpandIcon", "qaExpandIcon", "skillNoIcon", "toolIcon", "skillNoExpandIcon", "toolExpandIcon", "completedIcon", "completedExpandIcon"]
7
+ }
@@ -0,0 +1,30 @@
1
+ interface IResponseData {
2
+ code: string;
3
+ httpCode?: number;
4
+ data: string | {
5
+ message: string;
6
+ };
7
+ message: string;
8
+ content: string;
9
+ requestId: string;
10
+ sessionId: string;
11
+ error?: boolean;
12
+ success?: boolean;
13
+ }
14
+ interface UseEventStreamProps {
15
+ streaming: boolean;
16
+ options?: RequestInit;
17
+ onOpen?: (response: Response) => void;
18
+ onError?: (error: Error) => void;
19
+ onClose?: () => void;
20
+ textSpeed?: number;
21
+ }
22
+ interface UseEventStreamReturn {
23
+ responseData: IResponseData | Record<any, any>;
24
+ loading: boolean;
25
+ start: (url: string, values?: any, headers?: Record<string, string>) => void;
26
+ stop: () => void;
27
+ onError?: (error: Error) => void;
28
+ }
29
+ export declare const useEventStreamRequest: ({ onOpen, onError, streaming, onClose, textSpeed, }: UseEventStreamProps) => UseEventStreamReturn;
30
+ export default useEventStreamRequest;