@ai-group/chat-sdk 1.0.30 → 2.0.1
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/cjs/components/XAiProvider/XAiProvider.stories.js +3 -3
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +2 -2
- package/dist/cjs/components/XAiProvider/index.js +4 -4
- package/dist/cjs/components/XAiProvider/index.js.map +2 -2
- package/dist/cjs/constants/index.d.ts +1 -0
- package/dist/cjs/constants/index.js +3 -0
- package/dist/cjs/constants/index.js.map +2 -2
- package/dist/cjs/hooks/useAgentGenerator.js +18 -20
- package/dist/cjs/hooks/useAgentGenerator.js.map +2 -2
- package/dist/cjs/services/api.d.ts +32 -32
- package/dist/cjs/services/api.js +2 -2
- package/dist/cjs/services/api.js.map +2 -2
- package/dist/esm/components/XAiProvider/XAiProvider.stories.js +3 -32
- package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +1 -1
- package/dist/esm/components/XAiProvider/index.js +19 -17
- package/dist/esm/components/XAiProvider/index.js.map +1 -1
- package/dist/esm/constants/index.d.ts +1 -0
- package/dist/esm/constants/index.js +3 -0
- package/dist/esm/constants/index.js.map +1 -1
- package/dist/esm/hooks/useAgentGenerator.js +56 -46
- package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
- package/dist/esm/services/api.d.ts +32 -32
- package/dist/esm/services/api.js +2 -2
- package/dist/esm/services/api.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -108,7 +108,7 @@ var 单聊天窗口实例 = {
|
|
|
108
108
|
url: "https://m-poc-dev.zaxline.com",
|
|
109
109
|
token: "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiZ2JWemZPVjhTa1oxdGRMT3BYNWZyVXpMIl0sImV4cCI6MTc2NDY3MTc2MSwianRpIjoiRl9Zb0JBXzhIN01XempDZUxQenEzNTBXRnNrIiwiY2xpZW50X2lkIjoiZ2JWemZPVjhTa1oxdGRMT3BYNWZyVXpMIn0.mtGBQfwNtIkhcOumsOvzMj2BdYUxAPwZ9GcvNLuCNGVzFkqkLkfy_LALjYR2B-RaNj11_Cx7DcewtmLceG31KfnCiFY24BD_CbwoahdFh40SYRTFnjDf8XQI22E63h5NxTuldPx0itYLUPaUO6NAubnRON40eQPGZKygM0i72ULsQQAyRpJLYAaTjUxyPIW3JmMzQmYiRx641JeAYAup4-ZNw-Fqmd-8_xK3kN-a832xM-M_eqXgn8yMttn0uFv95lxPdJ1_-mp2zx8N4TBCYVkHo3u_PjM65S3_p4u1dFGXBDAsxtVMgmVGeUvubTLFuDM153rz9MZ7aOuu_c8K7w",
|
|
110
110
|
config: {
|
|
111
|
-
appNo: "
|
|
111
|
+
appNo: "PGlA63A1Gt9oZpxa6YCWMciH"
|
|
112
112
|
},
|
|
113
113
|
providerId: "demo-provider"
|
|
114
114
|
}
|
|
@@ -166,9 +166,9 @@ var 携带历史记录示例 = {
|
|
|
166
166
|
},
|
|
167
167
|
args: {
|
|
168
168
|
url: "https://m-poc-dev.zaxline.com",
|
|
169
|
-
token: "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.
|
|
169
|
+
token: "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsicmN4anBibU44VVgxVVRRbTU0b0ZNTEtwIl0sImV4cCI6MTc2NDkzNjIzNywianRpIjoiTTU3ZjVhWHU0MVJENTN6dFJlU2pXaUZTTXJzIiwiY2xpZW50X2lkIjoicmN4anBibU44VVgxVVRRbTU0b0ZNTEtwIn0.Qnfq9ndj-Wd3Z-XX5fTPL2QyzVPWb3QQ8mmWVD5LfcKsEb9KQ8qwA1DBuC_6bhqT2CrWEHr9VbrwhES5a2Hh63hqtQYaAnZ4hqigutkKiR_wB-vrnhfrnupiXrrO0oYRCCLAvIsZS0KCqq2U3MGBVGPqciofUbjCrROgSXXDpNmosJKR8HBAmM8dWElCSuTGm3J0T3f0nb_4AYq10ssl8Pfy7b7HnDNIccDj-IuBKfqKrQR0Uk6CkOcgc1tUVZdcvqGzZos7ms7yPsfrq9lJ4-mx8Z-OyCsDrXJU-VpUCLZmLGWfWPKAR3FDc3KnyCZAAWkzVwjLZG9vBmzsOW6Unw",
|
|
170
170
|
config: {
|
|
171
|
-
appNo: "
|
|
171
|
+
appNo: "rcxjpbmN8UX1UTQm54oFMLKp",
|
|
172
172
|
chatProps: {
|
|
173
173
|
clearBtnShow: false
|
|
174
174
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAiProvider/XAiProvider.stories.tsx"],
|
|
4
|
-
"sourcesContent": ["import React from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Button } from 'antd';\nimport XAiProvider from './index';\nimport XAiChatbot from '../XAiChatbot';\nimport XAiConversations from '../XAiConversations';\n\nconst meta: Meta<typeof XAiProvider> = {\n title: 'AI组件/XAiProvider AI容器',\n component: XAiProvider,\n parameters: {\n layout: 'centered',\n docs: {\n description: {\n component: 'AI 聊天机器人容器组件,提供全局上下文和消息管理功能。',\n },\n },\n },\n tags: ['autodocs'],\n argTypes: {\n config: {\n description: '配置信息',\n table: {\n type: { \n summary: 'XAiProviderConfig',\n detail: `{\n appNo?: string; // 应用唯一编号\n }`\n },\n category: '配置选项'\n }\n }\n },\n // 添加装饰器,确保组件有必要的上下文\n decorators: [\n (Story) => (\n <div style={{ padding: '20px' }}>\n <Story />\n </div>\n ),\n ],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 使用 Provider 的 XAiChatbot\nexport const 单聊天窗口实例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n const handleSendMessage = () => {\n if (providerRef.current?.chat) {\n providerRef.current.chat('你好,AI!');\n } else {\n console.log('XAiProvider ref 未准备好或 chat 方法不存在');\n }\n };\n\n return (\n <div style={{ display: 'flex' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px', marginRight: '24px', justifyContent: 'center' }}>\n <Button type=\"primary\" onClick={handleSendMessage}>发送消息</Button>\n </div>\n <div style={{ maxWidth: '800px', height: '600px' }}>\n <XAiProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onMessage={(data) => console.log(data)}\n >\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n );\n },\n args: {\n url: 'https://m-poc-dev.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiZ2JWemZPVjhTa1oxdGRMT3BYNWZyVXpMIl0sImV4cCI6MTc2NDY3MTc2MSwianRpIjoiRl9Zb0JBXzhIN01XempDZUxQenEzNTBXRnNrIiwiY2xpZW50X2lkIjoiZ2JWemZPVjhTa1oxdGRMT3BYNWZyVXpMIn0.mtGBQfwNtIkhcOumsOvzMj2BdYUxAPwZ9GcvNLuCNGVzFkqkLkfy_LALjYR2B-RaNj11_Cx7DcewtmLceG31KfnCiFY24BD_CbwoahdFh40SYRTFnjDf8XQI22E63h5NxTuldPx0itYLUPaUO6NAubnRON40eQPGZKygM0i72ULsQQAyRpJLYAaTjUxyPIW3JmMzQmYiRx641JeAYAup4-ZNw-Fqmd-8_xK3kN-a832xM-M_eqXgn8yMttn0uFv95lxPdJ1_-mp2zx8N4TBCYVkHo3u_PjM65S3_p4u1dFGXBDAsxtVMgmVGeUvubTLFuDM153rz9MZ7aOuu_c8K7w',\n config: {\n appNo: '
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAElB,kBAAuB;AACvB,mBAAwB;AACxB,wBAAuB;AACvB,8BAA6B;AAE7B,IAAM,OAAiC;AAAA,EACrC,OAAO;AAAA,EACP,WAAW,aAAAA;AAAA,EACX,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,MACJ,aAAa;AAAA,QACX,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM,CAAC,UAAU;AAAA,EACjB,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,QACL,MAAM;AAAA,UACJ,SAAS;AAAA,UACT,QAAQ;AAAA;AAAA;AAAA,QAGV;AAAA,QACA,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAEA,YAAY;AAAA,IACV,CAAC,UACC,6BAAAC,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,OAAO,KAC5B,6BAAAA,QAAA,cAAC,WAAM,CACT;AAAA,EAEJ;AACF;AAEA,IAAO,8BAAQ;AAIR,IAAM,UAAiB;AAAA,EAC5B,QAAQ,CAAC,SAAS;AAChB,UAAM,cAAc,aAAAA,QAAM,OAAY,IAAI;AAE1C,UAAM,oBAAoB,MAAM;AAnDpC;AAoDM,WAAI,iBAAY,YAAZ,mBAAqB,MAAM;AAC7B,oBAAY,QAAQ,KAAK,QAAQ;AAAA,MACnC,OAAO;AACL,gBAAQ,IAAI,kCAAkC;AAAA,MAChD;AAAA,IACF;AAEA,WACE,6BAAAA,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,OAAO,KAC5B,6BAAAA,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,QAAQ,aAAa,QAAQ,gBAAgB,SAAS,KACjH,6BAAAA,QAAA,cAAC,sBAAO,MAAK,WAAU,SAAS,qBAAmB,MAAI,CACzD,GACA,6BAAAA,QAAA,cAAC,SAAI,OAAO,EAAE,UAAU,SAAS,QAAQ,QAAQ,KAC/C,6BAAAA,QAAA;AAAA,MAAC,aAAAD;AAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACJ,GAAG;AAAA,QACJ,SAAS,CAAC,kBAAkB,QAAQ,IAAI,aAAa;AAAA,QACrD,WAAW,CAAC,SAAS,QAAQ,IAAI,IAAI;AAAA;AAAA,MAErC,6BAAAC,QAAA;AAAA,QAAC,kBAAAC;AAAA,QAAA;AAAA,UACC,YAAU;AAAA,UACV,QAAQ;AAAA,YACN,OAAO;AAAA,YACP,UAAU;AAAA,YACV,QAAQ;AAAA,UACV;AAAA;AAAA,MACF;AAAA,IACF,CACF,CACF;AAAA,EAEJ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,EACd;AACF;
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Button } from 'antd';\nimport XAiProvider from './index';\nimport XAiChatbot from '../XAiChatbot';\nimport XAiConversations from '../XAiConversations';\n\nconst meta: Meta<typeof XAiProvider> = {\n title: 'AI组件/XAiProvider AI容器',\n component: XAiProvider,\n parameters: {\n layout: 'centered',\n docs: {\n description: {\n component: 'AI 聊天机器人容器组件,提供全局上下文和消息管理功能。',\n },\n },\n },\n tags: ['autodocs'],\n argTypes: {\n config: {\n description: '配置信息',\n table: {\n type: { \n summary: 'XAiProviderConfig',\n detail: `{\n appNo?: string; // 应用唯一编号\n }`\n },\n category: '配置选项'\n }\n }\n },\n // 添加装饰器,确保组件有必要的上下文\n decorators: [\n (Story) => (\n <div style={{ padding: '20px' }}>\n <Story />\n </div>\n ),\n ],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 使用 Provider 的 XAiChatbot\nexport const 单聊天窗口实例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n const handleSendMessage = () => {\n if (providerRef.current?.chat) {\n providerRef.current.chat('你好,AI!');\n } else {\n console.log('XAiProvider ref 未准备好或 chat 方法不存在');\n }\n };\n\n return (\n <div style={{ display: 'flex' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px', marginRight: '24px', justifyContent: 'center' }}>\n <Button type=\"primary\" onClick={handleSendMessage}>发送消息</Button>\n </div>\n <div style={{ maxWidth: '800px', height: '600px' }}>\n <XAiProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onMessage={(data) => console.log(data)}\n >\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n );\n },\n args: {\n url: 'https://m-poc-dev.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiZ2JWemZPVjhTa1oxdGRMT3BYNWZyVXpMIl0sImV4cCI6MTc2NDY3MTc2MSwianRpIjoiRl9Zb0JBXzhIN01XempDZUxQenEzNTBXRnNrIiwiY2xpZW50X2lkIjoiZ2JWemZPVjhTa1oxdGRMT3BYNWZyVXpMIn0.mtGBQfwNtIkhcOumsOvzMj2BdYUxAPwZ9GcvNLuCNGVzFkqkLkfy_LALjYR2B-RaNj11_Cx7DcewtmLceG31KfnCiFY24BD_CbwoahdFh40SYRTFnjDf8XQI22E63h5NxTuldPx0itYLUPaUO6NAubnRON40eQPGZKygM0i72ULsQQAyRpJLYAaTjUxyPIW3JmMzQmYiRx641JeAYAup4-ZNw-Fqmd-8_xK3kN-a832xM-M_eqXgn8yMttn0uFv95lxPdJ1_-mp2zx8N4TBCYVkHo3u_PjM65S3_p4u1dFGXBDAsxtVMgmVGeUvubTLFuDM153rz9MZ7aOuu_c8K7w',\n config: {\n appNo: 'PGlA63A1Gt9oZpxa6YCWMciH',\n },\n providerId: 'demo-provider',\n },\n};\n\n\n// 多个 Provider 示例\nexport const 多容器示例: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px' }}>\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-1\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 1',\n subtitle: '第一个聊天机器人',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-2\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 2',\n subtitle: '第二个聊天机器人',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n url: 'https://api.example.com/ai',\n token: 'your-token-here',\n },\n};\n\n// 使用 Provider 的 XAiChatbot\nexport const 携带历史记录示例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n return (\n <div style={{ width: '1080px', height: '600px', overflow: 'hidden' }}>\n <XAiProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onMessage={(data) => console.log(data)}\n >\n <XAiConversations />\n <div style={{ flex: 1, display: 'flex', justifyContent: 'center' }}>\n <XAiChatbot\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n );\n },\n args: {\n url: 'https://m-poc-dev.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsicmN4anBibU44VVgxVVRRbTU0b0ZNTEtwIl0sImV4cCI6MTc2NDkzNjIzNywianRpIjoiTTU3ZjVhWHU0MVJENTN6dFJlU2pXaUZTTXJzIiwiY2xpZW50X2lkIjoicmN4anBibU44VVgxVVRRbTU0b0ZNTEtwIn0.Qnfq9ndj-Wd3Z-XX5fTPL2QyzVPWb3QQ8mmWVD5LfcKsEb9KQ8qwA1DBuC_6bhqT2CrWEHr9VbrwhES5a2Hh63hqtQYaAnZ4hqigutkKiR_wB-vrnhfrnupiXrrO0oYRCCLAvIsZS0KCqq2U3MGBVGPqciofUbjCrROgSXXDpNmosJKR8HBAmM8dWElCSuTGm3J0T3f0nb_4AYq10ssl8Pfy7b7HnDNIccDj-IuBKfqKrQR0Uk6CkOcgc1tUVZdcvqGzZos7ms7yPsfrq9lJ4-mx8Z-OyCsDrXJU-VpUCLZmLGWfWPKAR3FDc3KnyCZAAWkzVwjLZG9vBmzsOW6Unw',\n config: {\n appNo: 'rcxjpbmN8UX1UTQm54oFMLKp',\n chatProps: {\n clearBtnShow: false\n }\n },\n providerId: 'demo-provider',\n },\n};"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["XAiProvider", "React", "XAiChatbot", "XAiConversations"]
|
|
7
7
|
}
|
|
@@ -142,14 +142,14 @@ var XAiProvider = (0, import_react.forwardRef)(({
|
|
|
142
142
|
return;
|
|
143
143
|
}
|
|
144
144
|
if (appNo) {
|
|
145
|
-
const
|
|
145
|
+
const { result } = await (0, import_api.addFeedback)({
|
|
146
146
|
url,
|
|
147
147
|
token,
|
|
148
148
|
appNo,
|
|
149
149
|
requestId: (_a2 = actionData.raw) == null ? void 0 : _a2.requestId,
|
|
150
150
|
isLike: 1
|
|
151
151
|
});
|
|
152
|
-
if (
|
|
152
|
+
if ((result == null ? void 0 : result.code) === import_constants.API_SUCCESS_CODE) {
|
|
153
153
|
import_antd.message.success("感谢您的反馈");
|
|
154
154
|
setMessages((prev) => {
|
|
155
155
|
return prev.map((item) => {
|
|
@@ -314,7 +314,7 @@ var XAiProvider = (0, import_react.forwardRef)(({
|
|
|
314
314
|
msg,
|
|
315
315
|
activeColor: (appInfo == null ? void 0 : appInfo.appTheme) || import_common.primaryBlue,
|
|
316
316
|
onSubmit: async (formData) => {
|
|
317
|
-
const
|
|
317
|
+
const { result } = await (0, import_api.addFeedback)({
|
|
318
318
|
...formData,
|
|
319
319
|
requestId,
|
|
320
320
|
isLike: -1,
|
|
@@ -322,7 +322,7 @@ var XAiProvider = (0, import_react.forwardRef)(({
|
|
|
322
322
|
appNo: config == null ? void 0 : config.appNo,
|
|
323
323
|
token
|
|
324
324
|
});
|
|
325
|
-
if (
|
|
325
|
+
if ((result == null ? void 0 : result.code) === import_constants.API_SUCCESS_CODE) {
|
|
326
326
|
import_antd.message.success("已收到您的反馈,我们会努力做的更好");
|
|
327
327
|
setMessages((prev) => {
|
|
328
328
|
return prev.map((item) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAiProvider/index.tsx"],
|
|
4
|
-
"sourcesContent": ["import React, { forwardRef, useImperativeHandle, useState, useRef, useEffect } from 'react';\nimport { message, Divider, Modal, Input, ConfigProvider } from 'antd';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport type { ConversationsProps } from '@ant-design/x';\nimport { ExclamationCircleFilled, LikeFilled, LikeOutlined } from '@ant-design/icons';\nimport { XAiContext } from '@/context/AiProviderContext';\nimport { XAiProviderProps, XAiProviderHandle } from '@/types/XAiProvider';\nimport useAgentGenerator from '@/hooks/useAgentGenerator';\nimport { MOBILE_MAX_WIDTH } from '@/constants';\nimport userIcon from '@/assets/user.png';\nimport { primaryBlue } from '@/styles/common';\nimport DislikeFeedback from '../DislikeFeedback';\nimport { addFeedback } from '@/services/api';\nimport { defaultActions } from '../XAiChatbot';\n\nconst { confirm } = Modal;\n\nconst XAiProvider = forwardRef<XAiProviderHandle, XAiProviderProps>(({\n url = window.location.origin,\n token,\n config,\n providerId = 'defaultId',\n onSuccess,\n onError,\n onMessage,\n children,\n}, ref) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n\n const { textSpeed = 55 } = config?.chatProps || {};\n\n const {\n appInfo,\n chat,\n stopChat,\n reChat,\n createNewChat,\n deleteSession,\n updateSession,\n currentSessionId,\n sessionPagination,\n sessionList,\n messages,\n loading,\n setCurrentSessionDetail,\n setMessages,\n } = useAgentGenerator({ url, token, config, onError, onSuccess, onMessage, textSpeed });\n\n const { appName, icon } = appInfo || {};\n\n useImperativeHandle(ref, () => ({\n chat,\n stopChat,\n reChat,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSessionDetail,\n }), [appInfo, messages, chat, stopChat, reChat, setMessages, setCurrentSessionDetail]);\n\n const [isNarrow, setIsNarrow] = useState<boolean>(false);\n const divRef = useRef<HTMLDivElement>(null);\n\n // 监听容器宽度变化\n useEffect(() => {\n const div = divRef.current;\n if (!div) return;\n\n // 创建监听器\n const resizeObserver = new ResizeObserver((entries) => {\n // eslint-disable-next-line no-restricted-syntax\n for (const entry of entries) {\n const { width } = entry.contentRect;\n setIsNarrow(width <= MOBILE_MAX_WIDTH);\n }\n });\n\n // 开始监听\n resizeObserver.observe(div);\n\n // 初始化检查\n const initialWidth = div.offsetWidth;\n setIsNarrow(initialWidth <= MOBILE_MAX_WIDTH);\n\n // 清理函数\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n // 发送消息\n const handleSendMessage = (_type: string, content: string) => {\n chat(content);\n };\n\n // 清空消息\n const handleCreateNewMessage = () => {\n createNewChat();\n };\n\n // 工具栏按钮点击\n const handleActions = async (index: number, actionData: any) => {\n const { content, id } = actionData || {};\n const { text = '' } = content;\n switch (index) {\n case 0:\n reChat();\n break;\n case 1:\n copy(text);\n message.success('复制成功');\n break;\n case 2: {\n const idx = messages.findIndex((item) => item.id === id);\n if (idx >= 0) {\n // 删除该条消息及建议类消息\n if (messages.length - idx <= 2) {\n setMessages((prev) => prev.filter((item) => item.id !== id && item.type !== 'SuggestionMessage'));\n } else {\n // 非最新消息 只删除该条消息\n setMessages((prev) => prev.filter((item) => item.id !== id));\n }\n message.success('删除成功');\n }\n break;\n }\n case 3: {\n const { appNo } = config || {};\n const isLike = actionData.isLike ?? 0;\n if (isLike !== 0) {\n message.warning('已收到您的反馈,无需重复提交');\n return;\n }\n if (appNo) {\n const res = await addFeedback({\n url,\n token,\n appNo,\n requestId: actionData.raw?.requestId,\n isLike: 1,\n });\n if (res.success) {\n message.success('感谢您的反馈');\n setMessages((prev) => {\n return prev.map((item) => {\n if (item.id === id) {\n return {\n ...item,\n isLike: 1,\n };\n }\n return item;\n });\n });\n } else {\n message.error('反馈失败,请稍后再试');\n }\n }\n break;\n }\n }\n };\n\n // 建议消息点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev: any[]) => prev.filter((m: any) => m.id !== id));\n };\n\n // 切换会话\n const handleActiveChange = (key: string) => {\n setCurrentSessionDetail(key);\n };\n\n // 删除会话\n const handleDeleteSession = (sessionId: string) => {\n deleteSession(sessionId);\n };\n\n // 修改会话内容\n const handleUpdateSession = (sessionId: string, title: string) => {\n updateSession(sessionId, title);\n };\n\n // 会话操作菜单\n const menuConfig: ConversationsProps['menu'] = (conversation) => ({\n items: [\n {\n label: '重命名',\n key: 'edit',\n },\n {\n label: '删除',\n key: 'delete',\n danger: true,\n },\n ],\n onClick: (menuInfo) => {\n menuInfo.domEvent.stopPropagation();\n const { key } = menuInfo;\n switch (key) {\n case 'edit': {\n let inputValue = conversation.label as string || '';\n confirm({\n title: '编辑对话名称',\n icon: null,\n content: (\n <Input\n defaultValue={inputValue}\n autoFocus\n style={{ width: '100%' }}\n onChange={(e) => {\n inputValue = e.target.value;\n }}\n />\n ),\n okText: '确认',\n cancelText: '取消',\n okButtonProps: {\n style: { background: '#000', borderColor: '#000', color: '#fff' },\n },\n onOk: () => {\n if (!inputValue.trim()) {\n message.error('对话名称不能为空');\n return Promise.reject();\n }\n handleUpdateSession(conversation.key, inputValue);\n },\n onCancel: () => {\n // 静默处理\n },\n });\n break;\n }\n case 'delete':\n confirm({\n title: '确认删除?',\n icon: <ExclamationCircleFilled />,\n content: '该对话内容将被删除无法恢复。',\n okText: '确认删除',\n okType: 'danger',\n cancelText: '取消',\n okButtonProps: {\n style: { background: '#ff4d4f', borderColor: '#ff4d4f', color: '#fff' },\n },\n onOk() {\n handleDeleteSession(conversation.key);\n },\n onCancel() {\n //\n },\n });\n break;\n }\n },\n });\n\n const ToolTip = (messageData: any) => {\n const finalResult = (messageData?.think || []).find((item: any) => item.actionName === 'FINISHED');\n if (!finalResult) return null;\n const { cost, token: tokenCount } = finalResult.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { (cost !== undefined && cost !== null) && <div>{cost}s</div> }\n { tokenCount && <Divider type=\"vertical\" /> }\n { tokenCount && <div>{ tokenCount } tokens</div> }\n </div>\n );\n };\n // 是否展示清空按钮\n const clearBtnShow = typeof config?.chatProps?.clearBtnShow !== 'undefined'\n ? config.chatProps.clearBtnShow\n : !config?.session?.showSessionList;\n\n return (\n <ConfigProvider theme={{\n token: {\n colorPrimary: appInfo?.appTheme || primaryBlue,\n },\n }}\n >\n <XProvider>\n <XAiContext.Provider value={{\n avatar: <img src={icon} alt=\"智能体头像\" />,\n userAvatar: <img src={userIcon} alt=\"用户头像\" />,\n emptyStateImage: icon,\n emptyStateText: appName,\n footerTips: '内容由AI生成,无法确保真实准确,仅供参考',\n providerId,\n sessionList,\n sessionTotal: sessionPagination.total,\n token,\n messages,\n loading,\n error: null,\n activeKey: currentSessionId,\n clearBtnShow,\n inputShow: config?.chatProps?.inputShow || true,\n isNarrow,\n messageTooltip: ToolTip,\n messageActions: [...defaultActions, {\n key: 'like',\n tooltip: '赞',\n render: (i, msg) => {\n const isLike = msg.isLike === 1;\n if (isLike) {\n return (\n <LikeFilled style={{ color: appInfo?.appTheme || primaryBlue }} />\n );\n }\n return <LikeOutlined />;\n },\n }, {\n key: 'dislike',\n tooltip: '踩',\n render: (_i, msg) => {\n const requestId = msg.raw?.requestId;\n return (\n <DislikeFeedback\n msg={msg}\n activeColor={appInfo?.appTheme || primaryBlue}\n onSubmit={async (formData) => {\n const res = await addFeedback({\n ...formData,\n requestId,\n isLike: -1,\n url,\n appNo: config?.appNo,\n token,\n });\n if (res.success) {\n message.success('已收到您的反馈,我们会努力做的更好');\n setMessages((prev) => {\n return prev.map((item) => {\n if (item.id === msg.id) {\n return {\n ...item,\n isLike: -1,\n };\n }\n return item;\n });\n });\n return true;\n }\n message.error('反馈失败,请稍后再试');\n return false;\n }}\n />\n );\n },\n }],\n onSend: handleSendMessage,\n onClear: handleCreateNewMessage,\n onNewChat: handleCreateNewMessage,\n onStop: stopChat,\n menu: menuConfig,\n onActiveChange: handleActiveChange,\n onSuggestMessageClick: handleSuggestMessageClick,\n onMessagesActionsCallback: handleActions,\n isInProvider: true,\n }}\n >\n <div\n ref={divRef}\n style={{\n display: 'flex',\n height: '100%',\n position: 'relative',\n }}\n >\n {children}\n </div>\n </XAiContext.Provider>\n </XProvider>\n </ConfigProvider>\n );\n});\n\nexport default XAiProvider;\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAoF;AACpF,kBAA+D;AAC/D,+BAAiB;AACjB,eAA0B;AAE1B,mBAAkE;AAClE,+BAA2B;AAE3B,+BAA8B;AAC9B,
|
|
4
|
+
"sourcesContent": ["import React, { forwardRef, useImperativeHandle, useState, useRef, useEffect } from 'react';\nimport { message, Divider, Modal, Input, ConfigProvider } from 'antd';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport type { ConversationsProps } from '@ant-design/x';\nimport { ExclamationCircleFilled, LikeFilled, LikeOutlined } from '@ant-design/icons';\nimport { XAiContext } from '@/context/AiProviderContext';\nimport { XAiProviderProps, XAiProviderHandle } from '@/types/XAiProvider';\nimport useAgentGenerator from '@/hooks/useAgentGenerator';\nimport { MOBILE_MAX_WIDTH, API_SUCCESS_CODE } from '@/constants';\nimport userIcon from '@/assets/user.png';\nimport { primaryBlue } from '@/styles/common';\nimport DislikeFeedback from '../DislikeFeedback';\nimport { addFeedback } from '@/services/api';\nimport { defaultActions } from '../XAiChatbot';\n\nconst { confirm } = Modal;\n\nconst XAiProvider = forwardRef<XAiProviderHandle, XAiProviderProps>(({\n url = window.location.origin,\n token,\n config,\n providerId = 'defaultId',\n onSuccess,\n onError,\n onMessage,\n children,\n}, ref) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n\n const { textSpeed = 55 } = config?.chatProps || {};\n\n const {\n appInfo,\n chat,\n stopChat,\n reChat,\n createNewChat,\n deleteSession,\n updateSession,\n currentSessionId,\n sessionPagination,\n sessionList,\n messages,\n loading,\n setCurrentSessionDetail,\n setMessages,\n } = useAgentGenerator({ url, token, config, onError, onSuccess, onMessage, textSpeed });\n\n const { appName, icon } = appInfo || {};\n\n useImperativeHandle(ref, () => ({\n chat,\n stopChat,\n reChat,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSessionDetail,\n }), [appInfo, messages, chat, stopChat, reChat, setMessages, setCurrentSessionDetail]);\n\n const [isNarrow, setIsNarrow] = useState<boolean>(false);\n const divRef = useRef<HTMLDivElement>(null);\n\n // 监听容器宽度变化\n useEffect(() => {\n const div = divRef.current;\n if (!div) return;\n\n // 创建监听器\n const resizeObserver = new ResizeObserver((entries) => {\n // eslint-disable-next-line no-restricted-syntax\n for (const entry of entries) {\n const { width } = entry.contentRect;\n setIsNarrow(width <= MOBILE_MAX_WIDTH);\n }\n });\n\n // 开始监听\n resizeObserver.observe(div);\n\n // 初始化检查\n const initialWidth = div.offsetWidth;\n setIsNarrow(initialWidth <= MOBILE_MAX_WIDTH);\n\n // 清理函数\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n // 发送消息\n const handleSendMessage = (_type: string, content: string) => {\n chat(content);\n };\n\n // 清空消息\n const handleCreateNewMessage = () => {\n createNewChat();\n };\n\n // 工具栏按钮点击\n const handleActions = async (index: number, actionData: any) => {\n const { content, id } = actionData || {};\n const { text = '' } = content;\n switch (index) {\n case 0:\n reChat();\n break;\n case 1:\n copy(text);\n message.success('复制成功');\n break;\n case 2: {\n const idx = messages.findIndex((item) => item.id === id);\n if (idx >= 0) {\n // 删除该条消息及建议类消息\n if (messages.length - idx <= 2) {\n setMessages((prev) => prev.filter((item) => item.id !== id && item.type !== 'SuggestionMessage'));\n } else {\n // 非最新消息 只删除该条消息\n setMessages((prev) => prev.filter((item) => item.id !== id));\n }\n message.success('删除成功');\n }\n break;\n }\n case 3: {\n const { appNo } = config || {};\n const isLike = actionData.isLike ?? 0;\n if (isLike !== 0) {\n message.warning('已收到您的反馈,无需重复提交');\n return;\n }\n if (appNo) {\n const { result } = await addFeedback({\n url,\n token,\n appNo,\n requestId: actionData.raw?.requestId,\n isLike: 1,\n });\n if (result?.code === API_SUCCESS_CODE) {\n message.success('感谢您的反馈');\n setMessages((prev) => {\n return prev.map((item) => {\n if (item.id === id) {\n return {\n ...item,\n isLike: 1,\n };\n }\n return item;\n });\n });\n } else {\n message.error('反馈失败,请稍后再试');\n }\n }\n break;\n }\n }\n };\n\n // 建议消息点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev: any[]) => prev.filter((m: any) => m.id !== id));\n };\n\n // 切换会话\n const handleActiveChange = (key: string) => {\n setCurrentSessionDetail(key);\n };\n\n // 删除会话\n const handleDeleteSession = (sessionId: string) => {\n deleteSession(sessionId);\n };\n\n // 修改会话内容\n const handleUpdateSession = (sessionId: string, title: string) => {\n updateSession(sessionId, title);\n };\n\n // 会话操作菜单\n const menuConfig: ConversationsProps['menu'] = (conversation) => ({\n items: [\n {\n label: '重命名',\n key: 'edit',\n },\n {\n label: '删除',\n key: 'delete',\n danger: true,\n },\n ],\n onClick: (menuInfo) => {\n menuInfo.domEvent.stopPropagation();\n const { key } = menuInfo;\n switch (key) {\n case 'edit': {\n let inputValue = conversation.label as string || '';\n confirm({\n title: '编辑对话名称',\n icon: null,\n content: (\n <Input\n defaultValue={inputValue}\n autoFocus\n style={{ width: '100%' }}\n onChange={(e) => {\n inputValue = e.target.value;\n }}\n />\n ),\n okText: '确认',\n cancelText: '取消',\n okButtonProps: {\n style: { background: '#000', borderColor: '#000', color: '#fff' },\n },\n onOk: () => {\n if (!inputValue.trim()) {\n message.error('对话名称不能为空');\n return Promise.reject();\n }\n handleUpdateSession(conversation.key, inputValue);\n },\n onCancel: () => {\n // 静默处理\n },\n });\n break;\n }\n case 'delete':\n confirm({\n title: '确认删除?',\n icon: <ExclamationCircleFilled />,\n content: '该对话内容将被删除无法恢复。',\n okText: '确认删除',\n okType: 'danger',\n cancelText: '取消',\n okButtonProps: {\n style: { background: '#ff4d4f', borderColor: '#ff4d4f', color: '#fff' },\n },\n onOk() {\n handleDeleteSession(conversation.key);\n },\n onCancel() {\n //\n },\n });\n break;\n }\n },\n });\n\n const ToolTip = (messageData: any) => {\n const finalResult = (messageData?.think || []).find((item: any) => item.actionName === 'FINISHED');\n if (!finalResult) return null;\n const { cost, token: tokenCount } = finalResult.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { (cost !== undefined && cost !== null) && <div>{cost}s</div> }\n { tokenCount && <Divider type=\"vertical\" /> }\n { tokenCount && <div>{ tokenCount } tokens</div> }\n </div>\n );\n };\n // 是否展示清空按钮\n const clearBtnShow = typeof config?.chatProps?.clearBtnShow !== 'undefined'\n ? config.chatProps.clearBtnShow\n : !config?.session?.showSessionList;\n\n return (\n <ConfigProvider theme={{\n token: {\n colorPrimary: appInfo?.appTheme || primaryBlue,\n },\n }}\n >\n <XProvider>\n <XAiContext.Provider value={{\n avatar: <img src={icon} alt=\"智能体头像\" />,\n userAvatar: <img src={userIcon} alt=\"用户头像\" />,\n emptyStateImage: icon,\n emptyStateText: appName,\n footerTips: '内容由AI生成,无法确保真实准确,仅供参考',\n providerId,\n sessionList,\n sessionTotal: sessionPagination.total,\n token,\n messages,\n loading,\n error: null,\n activeKey: currentSessionId,\n clearBtnShow,\n inputShow: config?.chatProps?.inputShow || true,\n isNarrow,\n messageTooltip: ToolTip,\n messageActions: [...defaultActions, {\n key: 'like',\n tooltip: '赞',\n render: (i, msg) => {\n const isLike = msg.isLike === 1;\n if (isLike) {\n return (\n <LikeFilled style={{ color: appInfo?.appTheme || primaryBlue }} />\n );\n }\n return <LikeOutlined />;\n },\n }, {\n key: 'dislike',\n tooltip: '踩',\n render: (_i, msg) => {\n const requestId = msg.raw?.requestId;\n return (\n <DislikeFeedback\n msg={msg}\n activeColor={appInfo?.appTheme || primaryBlue}\n onSubmit={async (formData) => {\n const { result } = await addFeedback({\n ...formData,\n requestId,\n isLike: -1,\n url,\n appNo: config?.appNo,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n message.success('已收到您的反馈,我们会努力做的更好');\n setMessages((prev) => {\n return prev.map((item) => {\n if (item.id === msg.id) {\n return {\n ...item,\n isLike: -1,\n };\n }\n return item;\n });\n });\n return true;\n }\n message.error('反馈失败,请稍后再试');\n return false;\n }}\n />\n );\n },\n }],\n onSend: handleSendMessage,\n onClear: handleCreateNewMessage,\n onNewChat: handleCreateNewMessage,\n onStop: stopChat,\n menu: menuConfig,\n onActiveChange: handleActiveChange,\n onSuggestMessageClick: handleSuggestMessageClick,\n onMessagesActionsCallback: handleActions,\n isInProvider: true,\n }}\n >\n <div\n ref={divRef}\n style={{\n display: 'flex',\n height: '100%',\n position: 'relative',\n }}\n >\n {children}\n </div>\n </XAiContext.Provider>\n </XProvider>\n </ConfigProvider>\n );\n});\n\nexport default XAiProvider;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["useAgentGenerator", "_a", "copy", "React", "userIcon", "DislikeFeedback"]
|
|
7
7
|
}
|
|
@@ -19,14 +19,17 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
// src/constants/index.ts
|
|
20
20
|
var constants_exports = {};
|
|
21
21
|
__export(constants_exports, {
|
|
22
|
+
API_SUCCESS_CODE: () => API_SUCCESS_CODE,
|
|
22
23
|
MOBILE_MAX_WIDTH: () => MOBILE_MAX_WIDTH,
|
|
23
24
|
SESSION_PAGE_SIZE: () => SESSION_PAGE_SIZE
|
|
24
25
|
});
|
|
25
26
|
module.exports = __toCommonJS(constants_exports);
|
|
26
27
|
var SESSION_PAGE_SIZE = 50;
|
|
27
28
|
var MOBILE_MAX_WIDTH = 760;
|
|
29
|
+
var API_SUCCESS_CODE = "XS000000";
|
|
28
30
|
// Annotate the CommonJS export names for ESM import in node:
|
|
29
31
|
0 && (module.exports = {
|
|
32
|
+
API_SUCCESS_CODE,
|
|
30
33
|
MOBILE_MAX_WIDTH,
|
|
31
34
|
SESSION_PAGE_SIZE
|
|
32
35
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/constants/index.ts"],
|
|
4
|
-
"sourcesContent": ["// 会话分页数\nexport const SESSION_PAGE_SIZE = 50;\n\n// 移动端交互最大宽度\nexport const MOBILE_MAX_WIDTH = 760;"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACO,IAAM,oBAAoB;AAG1B,IAAM,mBAAmB;",
|
|
4
|
+
"sourcesContent": ["// 会话分页数\nexport const SESSION_PAGE_SIZE = 50;\n\n// 移动端交互最大宽度\nexport const MOBILE_MAX_WIDTH = 760;\n\n// 成功状态码\nexport const API_SUCCESS_CODE = 'XS000000';"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACO,IAAM,oBAAoB;AAG1B,IAAM,mBAAmB;AAGzB,IAAM,mBAAmB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -426,9 +426,9 @@ var useAgentGenerator = (params) => {
|
|
|
426
426
|
if (url && config) {
|
|
427
427
|
const initConfig = async () => {
|
|
428
428
|
try {
|
|
429
|
-
const result = await (0, import_api.fetchAppConfig)({ url, ...config });
|
|
430
|
-
if (result.
|
|
431
|
-
setAppInfo(
|
|
429
|
+
const { data, result } = await (0, import_api.fetchAppConfig)({ url, ...config });
|
|
430
|
+
if (result.code === import_constants.API_SUCCESS_CODE) {
|
|
431
|
+
setAppInfo(data);
|
|
432
432
|
onSuccess == null ? void 0 : onSuccess({
|
|
433
433
|
code: import_types.SuccessCode.APP_CONFIG_INIT_SUCCESS,
|
|
434
434
|
message: "初始化配置成功"
|
|
@@ -661,19 +661,17 @@ var useAgentGenerator = (params) => {
|
|
|
661
661
|
}
|
|
662
662
|
};
|
|
663
663
|
const initAppConversations = async (fetchDetail = false) => {
|
|
664
|
-
var _a, _b, _c, _d;
|
|
665
664
|
try {
|
|
666
|
-
const result = await (0, import_api.fetchSessionList)({
|
|
665
|
+
const { data = [], pagination, result } = await (0, import_api.fetchSessionList)({
|
|
667
666
|
url,
|
|
668
667
|
appNo,
|
|
669
668
|
token,
|
|
670
669
|
pageNum: sessionPagination.pageNum,
|
|
671
670
|
pageSize: sessionPagination.pageSize
|
|
672
671
|
});
|
|
673
|
-
if (result == null ? void 0 : result.
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
const formatSessions = resultData.map((item) => {
|
|
672
|
+
if ((result == null ? void 0 : result.code) === import_constants.API_SUCCESS_CODE) {
|
|
673
|
+
if (data.length > 0) {
|
|
674
|
+
const formatSessions = data.map((item) => {
|
|
677
675
|
return {
|
|
678
676
|
key: item.sessionId,
|
|
679
677
|
label: item.title || "新对话",
|
|
@@ -685,8 +683,8 @@ var useAgentGenerator = (params) => {
|
|
|
685
683
|
};
|
|
686
684
|
});
|
|
687
685
|
setSessionList(formatSessions);
|
|
688
|
-
setSessionPagination({ pageNum:
|
|
689
|
-
const { sessionId } =
|
|
686
|
+
setSessionPagination({ pageNum: sessionPagination.pageNum, pageSize: sessionPagination.pageSize, total: (pagination == null ? void 0 : pagination.total) || 0 });
|
|
687
|
+
const { sessionId } = data == null ? void 0 : data[0];
|
|
690
688
|
fetchDetail && setCurrentSessionDetail(sessionId);
|
|
691
689
|
} else {
|
|
692
690
|
setSessionList([]);
|
|
@@ -704,21 +702,21 @@ var useAgentGenerator = (params) => {
|
|
|
704
702
|
}
|
|
705
703
|
};
|
|
706
704
|
const setCurrentSessionDetail = async (sessionId) => {
|
|
707
|
-
var _a, _b;
|
|
708
705
|
if (sessionId) {
|
|
709
706
|
if (sessionId === currentSessionId) {
|
|
710
707
|
return;
|
|
711
708
|
}
|
|
712
709
|
setCurrentSessionId(sessionId);
|
|
713
|
-
const
|
|
710
|
+
const { data, result } = await (0, import_api.fetchSessionDetail)({
|
|
714
711
|
url,
|
|
715
712
|
appNo,
|
|
716
713
|
sessionId,
|
|
717
714
|
token
|
|
718
715
|
});
|
|
719
|
-
if (
|
|
720
|
-
const sessionsData =
|
|
721
|
-
const
|
|
716
|
+
if ((result == null ? void 0 : result.code) === import_constants.API_SUCCESS_CODE) {
|
|
717
|
+
const sessionsData = data == null ? void 0 : data.reduce((acc, cur) => {
|
|
718
|
+
const sessionMessages = Array.isArray(cur.sessionMessages) ? cur.sessionMessages : [];
|
|
719
|
+
const msgs = sessionMessages.map((msg) => ({
|
|
722
720
|
...msg,
|
|
723
721
|
raw: cur,
|
|
724
722
|
isLike: cur == null ? void 0 : cur.isLike
|
|
@@ -736,13 +734,13 @@ var useAgentGenerator = (params) => {
|
|
|
736
734
|
const deleteSession = async (sessionId) => {
|
|
737
735
|
if (!sessionId)
|
|
738
736
|
return;
|
|
739
|
-
const result = await (0, import_api.delSessionId)({
|
|
737
|
+
const { result } = await (0, import_api.delSessionId)({
|
|
740
738
|
url,
|
|
741
739
|
appNo,
|
|
742
740
|
sessionId,
|
|
743
741
|
token
|
|
744
742
|
});
|
|
745
|
-
if (result == null ? void 0 : result.
|
|
743
|
+
if ((result == null ? void 0 : result.code) === import_constants.API_SUCCESS_CODE) {
|
|
746
744
|
initAppConversations(false);
|
|
747
745
|
if (sessionId === currentSessionId) {
|
|
748
746
|
createNewChat();
|
|
@@ -752,14 +750,14 @@ var useAgentGenerator = (params) => {
|
|
|
752
750
|
const updateSession = async (sessionId, title) => {
|
|
753
751
|
if (!sessionId && !title)
|
|
754
752
|
return;
|
|
755
|
-
const result = await (0, import_api.updateSessionTitle)({
|
|
753
|
+
const { result } = await (0, import_api.updateSessionTitle)({
|
|
756
754
|
url,
|
|
757
755
|
appNo,
|
|
758
756
|
title,
|
|
759
757
|
sessionId,
|
|
760
758
|
token
|
|
761
759
|
});
|
|
762
|
-
if (result == null ? void 0 : result.
|
|
760
|
+
if ((result == null ? void 0 : result.code) === import_constants.API_SUCCESS_CODE) {
|
|
763
761
|
initAppConversations(false);
|
|
764
762
|
}
|
|
765
763
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/hooks/useAgentGenerator.ts"],
|
|
4
|
-
"sourcesContent": ["import { useState, useEffect, useMemo, useCallback, 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, Success, SuccessCode, sessionData } from '@/types';\nimport { request } from '@/utils/request';\nimport { safeJsonParse } from '@/utils/index';\nimport { SESSION_PAGE_SIZE } from '@/constants';\nimport { fetchAppConfig, fetchSessionList, fetchSessionDetail, delSessionId, updateSessionTitle } from '@/services/api';\nimport { getNodeTemplate } from '@/utils/workflowNode';\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\n// ==================== 类型定义 ====================\nexport type ContentType = 'TEXT' | 'IMAGE' | 'FILE' | 'JSON';\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\nexport type Contents = ContentDef[];\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 reasoning = 'REASONING',\n reasoningStart = 'REASONING_START',\n reasoningEnd = 'REASONING_END',\n componentStart = 'COMPONENT_START',\n componentStream = 'COMPONENT_STREAM',\n componentEnd = 'COMPONENT_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\nexport interface Action {\n name: string;\n description: string;\n jsonSchema: string;\n available?: ActionAvailability;\n}\n\nexport interface BaseFields {\n textSpeed?: number;\n onChatDone?: () => void;\n}\n\nexport interface UseAgentGeneratorProps {\n url: string;\n token: string;\n config: any;\n textSpeed?: number;\n onError?: (error: Error) => void;\n onSuccess?: (data: Success) => void;\n onMessage?: (content: string, data: Messages) => void;\n}\n\n// ==================== 消息处理器 ====================\nclass MessageProcessor {\n private textSpeed: number;\n\n constructor(textSpeed = 60) {\n this.textSpeed = textSpeed;\n }\n\n // 获取知识图标\n private getKnowledgeIcons(knowledgeType: string) {\n return knowledgeType === 'DOCUMENT'\n ? { icon: documentIcon, expandIcon: documentExpandIcon }\n : { icon: qaIcon, expandIcon: qaExpandIcon };\n }\n\n // 获取工具图标\n private getToolIcons(toolType: string) {\n return toolType === 'SKILL'\n ? { icon: skillNoIcon, expandIcon: skillNoExpandIcon }\n : { icon: toolIcon, expandIcon: toolExpandIcon };\n }\n\n // 获取工作流图标(暂时不做区分)\n private getWorkflowIcon() {\n return { icon: skillNoIcon, expandIcon: skillNoExpandIcon };\n }\n\n // 更新工具执行事件\n private updateExecution(\n messages: Messages[],\n messageIndex: number,\n uniqueId: string,\n cost: number,\n name?: string,\n ) {\n const msg = messages[messageIndex] as TextMessage;\n if (msg?.execute) {\n const execution = msg.execute.find((item) => item.id === uniqueId);\n if (execution) {\n execution.extra.cost = cost ? (cost / 1000).toFixed(2) : 0;\n if (name) execution.name = name;\n }\n }\n }\n\n // 查找最后一个待处理的AI消息\n private findLastPendingAIMessage(messages: Messages[]): [number, TextMessage | null] {\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role === MessageRole.assistant\n && msg.type === 'TextMessage'\n && (msg.status === 'init' || msg.status === 'pending')) {\n return [i, msg as TextMessage];\n }\n }\n return [-1, null];\n }\n\n // 创建新的AI消息\n private createNewAIMessage(): TextMessage {\n return {\n id: uuidV4(),\n type: 'TextMessage',\n createdAt: new Date(),\n role: MessageRole.assistant,\n content: { text: '' },\n execute: [],\n thinks: '',\n status: MessageStatus.init,\n };\n }\n\n // 确保存在待处理的AI消息\n private ensureAIMessageExists(messages: Messages[]): [Messages[], number, TextMessage] {\n const [index, existingMsg] = this.findLastPendingAIMessage(messages);\n\n if (index !== -1 && existingMsg) {\n return [[...messages], index, { ...existingMsg }];\n }\n\n const newMessage = this.createNewAIMessage();\n const newMessages = [...messages, newMessage];\n return [newMessages, newMessages.length - 1, newMessage];\n }\n\n // 处理建议\n handleSuggestion(messages: Messages[], data: any): Messages[] {\n const { content } = data;\n const newMessages = [...messages];\n const suggestIndex = newMessages.findIndex((item) => item.type === 'SuggestionMessage');\n\n if (suggestIndex === -1) {\n const newSuggestion: SuggestionMessage = {\n id: uuidV4(),\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content: [{ key: uuidV4(), description: content }],\n };\n newMessages.push(newSuggestion);\n } else {\n const suggestion = newMessages[suggestIndex] as SuggestionMessage;\n suggestion?.content?.push({\n key: uuidV4(),\n description: content,\n });\n }\n\n return newMessages;\n }\n\n // 处理思考过程\n handleReasoning(messages: Messages[], data: any): Messages[] {\n const { content } = data;\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n\n // 确保消息状态正确\n const updatedMsg: Messages = {\n ...aiMsg,\n thinks: (aiMsg.thinks || '') + content,\n status: aiMsg.status === MessageStatus.init ? MessageStatus.pending : aiMsg.status,\n };\n\n const updatedMessages = [...newMessages];\n updatedMessages[index] = updatedMsg;\n\n return updatedMessages;\n }\n\n // 处理思考过程结束\n handleReasoningEnd(messages: Messages[]): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n\n // 确保消息状态正确\n const updatedMsg: Messages = {\n ...aiMsg,\n thinks: `${aiMsg.thinks || ''}\\n`,\n status: aiMsg.status === MessageStatus.init ? MessageStatus.pending : aiMsg.status,\n };\n\n const updatedMessages = [...newMessages];\n updatedMessages[index] = updatedMsg;\n\n return updatedMessages;\n }\n\n // 处理知识库调用开始\n handleRecallKnowledgeStart(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { uniqueId = uuidV4() } = data || {};\n const { args } = data?.data || {};\n\n aiMsg.execute = aiMsg.execute || [];\n\n aiMsg.execute.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: '开始搜索知识库',\n arguments: args,\n extra: {\n ...data,\n icon: documentIcon,\n expandIcon: documentExpandIcon,\n },\n });\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理知识库调用结束\n handleRecallKnowledgeEnd(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n if (index === -1) return messages;\n const { uniqueId = uuidV4(), cost } = data || {};\n\n const newMessages = [...messages];\n this.updateExecution(newMessages, index, uniqueId, cost, '已搜索知识库');\n return newMessages;\n }\n\n // 处理工具调用开始\n handleInvokeToolStart(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { uniqueId = uuidV4() } = data || {};\n const { args, toolType } = data?.data || {};\n\n aiMsg.execute = aiMsg.execute || [];\n const icons = this.getToolIcons(toolType);\n\n aiMsg.execute.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: toolType === 'SKILL' ? '已调用工作流' : '已调用工具',\n arguments: args,\n extra: {\n ...data,\n ...icons,\n },\n });\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理工具调用结束\n handleInvokeToolEnd(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n const { uniqueId = uuidV4() } = data || {};\n const { toolType } = data?.data || {};\n if (index === -1) return messages;\n\n const newMessages = [...messages];\n this.updateExecution(newMessages, index, uniqueId, data.cost, toolType === 'SKILL' ? '已调用工作流组件' : '已调用工具');\n return newMessages;\n }\n\n // 处理工作流组件开始\n handleComponentStart(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { content } = data || {};\n const { nodeId, args, componentType } = content || {};\n const { name } = getNodeTemplate(componentType);\n aiMsg?.execute?.push({\n id: nodeId || uuidV4(),\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: name ? `开始调用${name}组件` : '开始调用工作流组件',\n arguments: args,\n extra: {\n ...data,\n ...this.getWorkflowIcon(),\n },\n });\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理工作流组件流消息\n handleComponentStream(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { nodeId = uuidV4, content } = data || {};\n const { processData } = content || {};\n aiMsg.raw = data.raw;\n aiMsg.stepContent = aiMsg.stepContent || [];\n aiMsg.stepContent.push({\n id: nodeId,\n content: processData,\n });\n\n // 消息状态改为接收中\n if (aiMsg.status === MessageStatus.init) {\n aiMsg.status = MessageStatus.pending;\n }\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理工作流组件结束\n handleComponentEnd(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n const { content } = data || {};\n const { nodeId, componentType } = content || {};\n const { name } = getNodeTemplate(componentType);\n if (index === -1) return messages;\n const newMessages = [...messages];\n this.updateExecution(newMessages, index, nodeId, data.cost, name ? `已调用完成${name}组件` : '已调用工作流组件');\n return newMessages;\n }\n\n // 处理响应正文\n handleResponse(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { contentType, content, success, errorMsg } = data;\n if (success) {\n aiMsg.raw = data.raw;\n // 消息状态改为接收中\n if (aiMsg.status === MessageStatus.init) {\n aiMsg.status = MessageStatus.pending;\n }\n // 文本类型数据\n if (contentType === 'TEXT' && 'text' in aiMsg.content) {\n aiMsg.content.text += content;\n }\n\n // JSON 格式数据\n if (contentType === 'JSON') {\n aiMsg.content.text += JSON.stringify(content);\n }\n\n } else {\n aiMsg.status = MessageStatus.failed;\n aiMsg.content.text = `<span style=\"color: red;\">❌ ${errorMsg}</span>`;\n }\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理完成\n handleFinish(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n const { data: { uniqueId = uuidV4() } = {}, cost, needExecuteDetail } = data || {};\n if (index === -1) return messages;\n\n const newMessages = [...messages];\n const msg = newMessages[index] as TextMessage;\n if (needExecuteDetail) {\n msg.execute = msg.execute || [];\n msg.execute.push({\n id: uniqueId || uuidV4(),\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: '运行完毕',\n extra: {\n ...data,\n cost: cost ? (cost / 1000).toFixed(2) : 0,\n icon: completedIcon,\n expandIcon: completedExpandIcon,\n },\n });\n }\n\n msg.status = MessageStatus.done;\n return newMessages;\n }\n\n // 处理响应数据\n processResponse(messages: Messages[], responseData: any): Messages[] {\n if (!responseData?.content && !responseData?.data) return messages;\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 const { action, data = {} } = response;\n\n data.raw = responseData;\n\n switch (action) {\n case ActionType.suggest:\n return this.handleSuggestion(messages, data);\n\n case ActionType.reasoning:\n return this.handleReasoning(messages, data);\n\n case ActionType.reasoningEnd:\n return this.handleReasoningEnd(messages);\n\n case ActionType.componentStart:\n return this.handleComponentStart(messages, data);\n\n case ActionType.componentStream:\n return this.handleComponentStream(messages, data);\n\n case ActionType.componentEnd:\n return this.handleComponentEnd(messages, data);\n\n case ActionType.recallKnowledgeStart:\n return this.handleRecallKnowledgeStart(messages, data);\n\n case ActionType.recallKnowledgeEnd:\n return this.handleRecallKnowledgeEnd(messages, data);\n\n case ActionType.invokeToolStart:\n return this.handleInvokeToolStart(messages, data);\n\n case ActionType.invokeToolEnd:\n return this.handleInvokeToolEnd(messages, data);\n\n case ActionType.response:\n return this.handleResponse(messages, data);\n\n case ActionType.finish:\n return this.handleFinish(messages, data);\n\n default:\n return messages;\n }\n }\n}\n\nconst useAgentGenerator = (params: UseAgentGeneratorProps) => {\n const {\n url,\n token,\n config,\n onError,\n onMessage,\n onSuccess,\n textSpeed = 55,\n ...rest\n } = params;\n\n // 聊天记录\n const [messages, setMessages] = useState<Messages[]>([]);\n // 聊天记录分页设置\n // const [messagePagination, setMessagePagination] = useState({ total: 0, pageNum: 1, pageSize: 999 });\n // 会话记录\n const [sessionList, setSessionList] = useState<sessionData[]>([]);\n // 会话请求是否加载中\n // const [sessionLoading, setSessionLoading] = useState<boolean>(false);\n // 会话分页设置\n const [sessionPagination, setSessionPagination] = useState({ total: 0, pageNum: 1, pageSize: SESSION_PAGE_SIZE });\n // 当前会话\n const [currentSessionId, setCurrentSessionId] = useState<string>('');\n // 应用 配置\n const [appInfo, setAppInfo] = useState<any>(null);\n // 请求 配置\n const requestInfo = useRef<{ requestId?: string; sensitiveWords?: string[] }>({});\n\n const { appNo } = config || {};\n\n // 消息处理器\n const messageProcessor = useMemo(() => new MessageProcessor(textSpeed), [textSpeed]);\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 // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_CONFIG_INIT_SUCCESS,\n message: '初始化配置成功',\n });\n } else {\n onError?.({\n code: (result.code as ErrorCode) || ErrorCode.APP_NOT_FOUND,\n message: result.message || '获取应用配置失败',\n });\n }\n } catch (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) return;\n\n setMessages((prev) => messageProcessor.processResponse(prev, responseData));\n }, [responseData, messageProcessor]);\n\n // 添加对话(非交互触发)\n const setMessage = useCallback(async (messageType: string, content: any) => {\n switch (messageType) {\n case 'prologue': {\n setMessages((prev) => {\n const prologueIndex = prev.findIndex((item) => item.extra?.prologue);\n\n if (prologueIndex === -1) {\n const newMessage: TextMessage = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: new Date(),\n role: MessageRole.assistant,\n status: MessageStatus.done,\n content: { text: content },\n extra: { prologue: true, noFooter: true },\n };\n return [newMessage, ...prev];\n }\n\n return prev.map((item) => (item.extra?.prologue && item.content && 'text' in item.content\n ? { ...item, content: { text: content } } as TextMessage\n : item));\n });\n break;\n }\n\n case 'suggest': {\n setMessages((prev) => {\n const suggestIndex = prev.findIndex((item) => item.type === 'SuggestionMessage');\n const prologueIndex = prev.findIndex((item) => item.extra?.prologue);\n\n const newSuggestion: SuggestionMessage = {\n id: uuidV4(),\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content,\n };\n\n if (suggestIndex === -1) {\n const newMessages = [...prev];\n const insertIndex = prologueIndex === -1 ? 0 : prologueIndex + 1;\n newMessages.splice(insertIndex, 0, newSuggestion);\n return newMessages;\n }\n\n return prev.map((item) => (item.type === 'SuggestionMessage'\n ? { ...item, content }\n : item));\n });\n break;\n }\n\n default:\n console.warn(`Unknown message type: ${messageType}`);\n }\n }, []);\n\n // 简单对话\n const chat = async <T = any>(content: T, extra?: any, insert = true) => {\n if (insert) {\n const newMessage: Messages = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: new Date(),\n role: MessageRole.user,\n status: MessageStatus.done,\n extra,\n content: { text: content as string },\n };\n\n setMessages((prev) => {\n const newMessages = prev.filter((item) => item.type !== 'SuggestionMessage');\n newMessages.push(newMessage);\n return newMessages;\n });\n }\n\n const requestBody: any = {\n appParams: {\n inputs_msg: content,\n },\n sessionId: currentSessionId,\n };\n\n start(\n `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsg`,\n requestBody,\n {\n Authorization: `Bearer ${token}`,\n },\n );\n };\n\n // 重新生成方法\n const reChat = useCallback(() => {\n setMessages((prev) => {\n const newMessages = [...prev];\n\n // 删除最新 AI 消息\n const lastAIIndex = newMessages?.findLastIndex(\n (m) => m.role === MessageRole.assistant && m.type === 'TextMessage'\n );\n if (lastAIIndex !== -1) {\n newMessages.splice(lastAIIndex, 1);\n }\n\n // 删除建议消息\n const suggestIndex = newMessages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestIndex !== -1) {\n newMessages.splice(suggestIndex, 1);\n }\n\n // 找到最后一条用户消息重新发送\n const lastUserMsg = newMessages.findLast(\n (m) => m.role === MessageRole.user && m.type === 'TextMessage',\n ) as TextMessage | undefined;\n\n if (lastUserMsg?.content?.text) {\n setTimeout(() => {\n chat(lastUserMsg.content.text as string, lastUserMsg.extra, false);\n }, 0);\n }\n\n return newMessages;\n });\n }, [chat]);\n\n // 停止对话\n const stopChat = () => {\n stop();\n setMessages((prev) => prev.map((m) => {\n // 所有进行中的消息变更为结束\n if (m.status === MessageStatus.pending || m.status === MessageStatus.init) {\n const newMsg = { ...m, status: MessageStatus.done };\n if (m.type === 'TextMessage' && m.status === MessageStatus.init) {\n (newMsg as TextMessage).content.text = '<span style=\"color: #cbcbcb;\">用户已取消</span>';\n }\n return newMsg;\n }\n return m;\n }));\n };\n\n // 初始化历史记录\n const formatMessages = (data: any, init = false) => {\n setMessages((prev) => {\n const initMessagesList: Messages[] = [];\n data.forEach((item: any) => {\n const { content, messageTime, role } = item || {};\n\n if (role === 'USER') {\n const newMessage: Messages = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: messageTime,\n role: MessageRole.user,\n status: MessageStatus.done,\n content: {\n text: content,\n },\n };\n\n initMessagesList.push(newMessage);\n } else if (role === 'AI') {\n const newMessage: TextMessage = {\n id: uuidV4(),\n type: 'TextMessage',\n createdAt: messageTime,\n role: MessageRole.assistant,\n content: { text: content },\n execute: [],\n status: MessageStatus.done,\n isLike: item.isLike,\n raw: item.raw,\n };\n\n initMessagesList.push(newMessage);\n }\n });\n\n if (init) {\n return [...initMessagesList];\n }\n return [...prev, ...initMessagesList];\n });\n };\n\n // 初始化开场白\n const initPrologue = async () => {\n const { onboardingInfo = {} } = appInfo;\n // eslint-disable-next-line camelcase\n const { suggested_questions = [], prologue = '' } = onboardingInfo || {};\n\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 // 页面为空时展示开场白预设问题\n const hasMessages = messages.some((item) => (!item.extra?.prologue && item.type !== 'SuggestionMessage'));\n if (!hasMessages) {\n setMessage('suggest', suggestMessages);\n }\n } else {\n setMessages((prev) => prev.filter((item) => !(item.type === 'SuggestionMessage')));\n }\n };\n\n // 获取聊天记录\n const initAppConversations = async (fetchDetail = false) => {\n try {\n const result = await fetchSessionList({\n url,\n appNo,\n token,\n pageNum: sessionPagination.pageNum,\n pageSize: sessionPagination.pageSize,\n });\n\n if (result?.success) {\n const resultData = result?.data?.data || [];\n if (resultData.length > 0) {\n const formatSessions = resultData.map((item) => {\n return {\n key: item.sessionId,\n label: item.title || '新对话',\n timestamp: new Date(item.gmtCreated).getTime(),\n messages: [],\n meta: {\n ...item,\n },\n };\n });\n\n setSessionList(formatSessions);\n // 设置分页信息\n setSessionPagination({ pageNum: result?.data?.pageNum, pageSize: result?.data?.pageSize, total: result?.data?.totalCount });\n const { sessionId } = resultData[0];\n fetchDetail && setCurrentSessionDetail(sessionId);\n } else {\n // 页面报错 初始化\n setSessionList([]);\n setCurrentSessionId(uuidV4());\n initPrologue();\n }\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_MESSAGES_INIT_SUCCESS,\n message: '初始化聊天记录成功',\n });\n } else {\n initPrologue();\n }\n } catch {\n //\n }\n };\n\n // 设置当前会话详情\n const setCurrentSessionDetail = async (sessionId: string) => {\n if (sessionId) {\n if (sessionId === currentSessionId) {\n return;\n }\n setCurrentSessionId(sessionId); // 设置当前会话 id;\n const sessionResult = await fetchSessionDetail({\n url,\n appNo,\n sessionId,\n token,\n });\n\n if (sessionResult?.success) {\n const sessionsData = sessionResult?.data?.list?.reduce((acc: any[], cur) => {\n const msgs = (cur.sessionMessages || []).map((msg) => ({\n ...msg,\n raw: cur,\n isLike: cur?.isLike,\n }));\n return [...acc, ...msgs];\n }, []);\n\n if (sessionsData.length > 0) {\n formatMessages(sessionsData, true);\n }\n }\n } else {\n // 兼容 无 session异常\n setCurrentSessionId(uuidV4());\n }\n };\n\n // 删除会话\n const deleteSession = async (sessionId: string) => {\n if (!sessionId) return;\n const result = await delSessionId({\n url,\n appNo,\n sessionId,\n token,\n });\n if (result?.success) {\n // 删除成功后,重新获取会话列表\n initAppConversations(false);\n // 如果删除的是当前会话,则创建新的会话\n if (sessionId === currentSessionId) {\n createNewChat();\n }\n }\n };\n\n // 更新会话名称\n const updateSession = async (sessionId: string, title: string) => {\n if (!sessionId && !title) return;\n const result = await updateSessionTitle({\n url,\n appNo,\n title,\n sessionId,\n token,\n });\n if (result?.success) {\n // 编辑成功后,重新获取会话列表\n initAppConversations(false);\n }\n };\n\n // 生成新对话\n const createNewChat = () => {\n stopChat(); // 停止聊天\n setMessages([]); // 清空所有消息\n initPrologue(); // 初始化开场白和预置问题\n setCurrentSessionId(uuidV4()); // 设置会话 id\n };\n\n // 初始化应用\n useEffect(() => {\n if (appInfo) {\n // 初始化历史数据\n initAppConversations(true);\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 sessionList,\n currentSessionId,\n sessionPagination,\n initAppConversations,\n reChat,\n chat,\n createNewChat,\n setCurrentSessionId,\n setCurrentSessionDetail,\n updateSession,\n deleteSession,\n setMessage,\n setMessages,\n stopChat,\n initPrologue,\n };\n};\n\nexport default useAgentGenerator;\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { useState, useEffect, useMemo, useCallback, 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, Success, SuccessCode, sessionData } from '@/types';\nimport { request } from '@/utils/request';\nimport { safeJsonParse } from '@/utils/index';\nimport { SESSION_PAGE_SIZE, API_SUCCESS_CODE } from '@/constants';\nimport { fetchAppConfig, fetchSessionList, fetchSessionDetail, delSessionId, updateSessionTitle } from '@/services/api';\nimport { getNodeTemplate } from '@/utils/workflowNode';\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\n// ==================== 类型定义 ====================\nexport type ContentType = 'TEXT' | 'IMAGE' | 'FILE' | 'JSON';\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\nexport type Contents = ContentDef[];\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 reasoning = 'REASONING',\n reasoningStart = 'REASONING_START',\n reasoningEnd = 'REASONING_END',\n componentStart = 'COMPONENT_START',\n componentStream = 'COMPONENT_STREAM',\n componentEnd = 'COMPONENT_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\nexport interface Action {\n name: string;\n description: string;\n jsonSchema: string;\n available?: ActionAvailability;\n}\n\nexport interface BaseFields {\n textSpeed?: number;\n onChatDone?: () => void;\n}\n\nexport interface UseAgentGeneratorProps {\n url: string;\n token: string;\n config: any;\n textSpeed?: number;\n onError?: (error: Error) => void;\n onSuccess?: (data: Success) => void;\n onMessage?: (content: string, data: Messages) => void;\n}\n\n// ==================== 消息处理器 ====================\nclass MessageProcessor {\n private textSpeed: number;\n\n constructor(textSpeed = 60) {\n this.textSpeed = textSpeed;\n }\n\n // 获取知识图标\n private getKnowledgeIcons(knowledgeType: string) {\n return knowledgeType === 'DOCUMENT'\n ? { icon: documentIcon, expandIcon: documentExpandIcon }\n : { icon: qaIcon, expandIcon: qaExpandIcon };\n }\n\n // 获取工具图标\n private getToolIcons(toolType: string) {\n return toolType === 'SKILL'\n ? { icon: skillNoIcon, expandIcon: skillNoExpandIcon }\n : { icon: toolIcon, expandIcon: toolExpandIcon };\n }\n\n // 获取工作流图标(暂时不做区分)\n private getWorkflowIcon() {\n return { icon: skillNoIcon, expandIcon: skillNoExpandIcon };\n }\n\n // 更新工具执行事件\n private updateExecution(\n messages: Messages[],\n messageIndex: number,\n uniqueId: string,\n cost: number,\n name?: string,\n ) {\n const msg = messages[messageIndex] as TextMessage;\n if (msg?.execute) {\n const execution = msg.execute.find((item) => item.id === uniqueId);\n if (execution) {\n execution.extra.cost = cost ? (cost / 1000).toFixed(2) : 0;\n if (name) execution.name = name;\n }\n }\n }\n\n // 查找最后一个待处理的AI消息\n private findLastPendingAIMessage(messages: Messages[]): [number, TextMessage | null] {\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role === MessageRole.assistant\n && msg.type === 'TextMessage'\n && (msg.status === 'init' || msg.status === 'pending')) {\n return [i, msg as TextMessage];\n }\n }\n return [-1, null];\n }\n\n // 创建新的AI消息\n private createNewAIMessage(): TextMessage {\n return {\n id: uuidV4(),\n type: 'TextMessage',\n createdAt: new Date(),\n role: MessageRole.assistant,\n content: { text: '' },\n execute: [],\n thinks: '',\n status: MessageStatus.init,\n };\n }\n\n // 确保存在待处理的AI消息\n private ensureAIMessageExists(messages: Messages[]): [Messages[], number, TextMessage] {\n const [index, existingMsg] = this.findLastPendingAIMessage(messages);\n\n if (index !== -1 && existingMsg) {\n return [[...messages], index, { ...existingMsg }];\n }\n\n const newMessage = this.createNewAIMessage();\n const newMessages = [...messages, newMessage];\n return [newMessages, newMessages.length - 1, newMessage];\n }\n\n // 处理建议\n handleSuggestion(messages: Messages[], data: any): Messages[] {\n const { content } = data;\n const newMessages = [...messages];\n const suggestIndex = newMessages.findIndex((item) => item.type === 'SuggestionMessage');\n\n if (suggestIndex === -1) {\n const newSuggestion: SuggestionMessage = {\n id: uuidV4(),\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content: [{ key: uuidV4(), description: content }],\n };\n newMessages.push(newSuggestion);\n } else {\n const suggestion = newMessages[suggestIndex] as SuggestionMessage;\n suggestion?.content?.push({\n key: uuidV4(),\n description: content,\n });\n }\n\n return newMessages;\n }\n\n // 处理思考过程\n handleReasoning(messages: Messages[], data: any): Messages[] {\n const { content } = data;\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n\n // 确保消息状态正确\n const updatedMsg: Messages = {\n ...aiMsg,\n thinks: (aiMsg.thinks || '') + content,\n status: aiMsg.status === MessageStatus.init ? MessageStatus.pending : aiMsg.status,\n };\n\n const updatedMessages = [...newMessages];\n updatedMessages[index] = updatedMsg;\n\n return updatedMessages;\n }\n\n // 处理思考过程结束\n handleReasoningEnd(messages: Messages[]): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n\n // 确保消息状态正确\n const updatedMsg: Messages = {\n ...aiMsg,\n thinks: `${aiMsg.thinks || ''}\\n`,\n status: aiMsg.status === MessageStatus.init ? MessageStatus.pending : aiMsg.status,\n };\n\n const updatedMessages = [...newMessages];\n updatedMessages[index] = updatedMsg;\n\n return updatedMessages;\n }\n\n // 处理知识库调用开始\n handleRecallKnowledgeStart(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { uniqueId = uuidV4() } = data || {};\n const { args } = data?.data || {};\n\n aiMsg.execute = aiMsg.execute || [];\n\n aiMsg.execute.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: '开始搜索知识库',\n arguments: args,\n extra: {\n ...data,\n icon: documentIcon,\n expandIcon: documentExpandIcon,\n },\n });\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理知识库调用结束\n handleRecallKnowledgeEnd(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n if (index === -1) return messages;\n const { uniqueId = uuidV4(), cost } = data || {};\n\n const newMessages = [...messages];\n this.updateExecution(newMessages, index, uniqueId, cost, '已搜索知识库');\n return newMessages;\n }\n\n // 处理工具调用开始\n handleInvokeToolStart(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { uniqueId = uuidV4() } = data || {};\n const { args, toolType } = data?.data || {};\n\n aiMsg.execute = aiMsg.execute || [];\n const icons = this.getToolIcons(toolType);\n\n aiMsg.execute.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: toolType === 'SKILL' ? '已调用工作流' : '已调用工具',\n arguments: args,\n extra: {\n ...data,\n ...icons,\n },\n });\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理工具调用结束\n handleInvokeToolEnd(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n const { uniqueId = uuidV4() } = data || {};\n const { toolType } = data?.data || {};\n if (index === -1) return messages;\n\n const newMessages = [...messages];\n this.updateExecution(newMessages, index, uniqueId, data.cost, toolType === 'SKILL' ? '已调用工作流组件' : '已调用工具');\n return newMessages;\n }\n\n // 处理工作流组件开始\n handleComponentStart(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { content } = data || {};\n const { nodeId, args, componentType } = content || {};\n const { name } = getNodeTemplate(componentType);\n aiMsg?.execute?.push({\n id: nodeId || uuidV4(),\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: name ? `开始调用${name}组件` : '开始调用工作流组件',\n arguments: args,\n extra: {\n ...data,\n ...this.getWorkflowIcon(),\n },\n });\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理工作流组件流消息\n handleComponentStream(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { nodeId = uuidV4, content } = data || {};\n const { processData } = content || {};\n aiMsg.raw = data.raw;\n aiMsg.stepContent = aiMsg.stepContent || [];\n aiMsg.stepContent.push({\n id: nodeId,\n content: processData,\n });\n\n // 消息状态改为接收中\n if (aiMsg.status === MessageStatus.init) {\n aiMsg.status = MessageStatus.pending;\n }\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理工作流组件结束\n handleComponentEnd(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n const { content } = data || {};\n const { nodeId, componentType } = content || {};\n const { name } = getNodeTemplate(componentType);\n if (index === -1) return messages;\n const newMessages = [...messages];\n this.updateExecution(newMessages, index, nodeId, data.cost, name ? `已调用完成${name}组件` : '已调用工作流组件');\n return newMessages;\n }\n\n // 处理响应正文\n handleResponse(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { contentType, content, success, errorMsg } = data;\n if (success) {\n aiMsg.raw = data.raw;\n // 消息状态改为接收中\n if (aiMsg.status === MessageStatus.init) {\n aiMsg.status = MessageStatus.pending;\n }\n // 文本类型数据\n if (contentType === 'TEXT' && 'text' in aiMsg.content) {\n aiMsg.content.text += content;\n }\n\n // JSON 格式数据\n if (contentType === 'JSON') {\n aiMsg.content.text += JSON.stringify(content);\n }\n\n } else {\n aiMsg.status = MessageStatus.failed;\n aiMsg.content.text = `<span style=\"color: red;\">❌ ${errorMsg}</span>`;\n }\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理完成\n handleFinish(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n const { data: { uniqueId = uuidV4() } = {}, cost, needExecuteDetail } = data || {};\n if (index === -1) return messages;\n\n const newMessages = [...messages];\n const msg = newMessages[index] as TextMessage;\n if (needExecuteDetail) {\n msg.execute = msg.execute || [];\n msg.execute.push({\n id: uniqueId || uuidV4(),\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: '运行完毕',\n extra: {\n ...data,\n cost: cost ? (cost / 1000).toFixed(2) : 0,\n icon: completedIcon,\n expandIcon: completedExpandIcon,\n },\n });\n }\n\n msg.status = MessageStatus.done;\n return newMessages;\n }\n\n // 处理响应数据\n processResponse(messages: Messages[], responseData: any): Messages[] {\n if (!responseData?.content && !responseData?.data) return messages;\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 const { action, data = {} } = response;\n\n data.raw = responseData;\n\n switch (action) {\n case ActionType.suggest:\n return this.handleSuggestion(messages, data);\n\n case ActionType.reasoning:\n return this.handleReasoning(messages, data);\n\n case ActionType.reasoningEnd:\n return this.handleReasoningEnd(messages);\n\n case ActionType.componentStart:\n return this.handleComponentStart(messages, data);\n\n case ActionType.componentStream:\n return this.handleComponentStream(messages, data);\n\n case ActionType.componentEnd:\n return this.handleComponentEnd(messages, data);\n\n case ActionType.recallKnowledgeStart:\n return this.handleRecallKnowledgeStart(messages, data);\n\n case ActionType.recallKnowledgeEnd:\n return this.handleRecallKnowledgeEnd(messages, data);\n\n case ActionType.invokeToolStart:\n return this.handleInvokeToolStart(messages, data);\n\n case ActionType.invokeToolEnd:\n return this.handleInvokeToolEnd(messages, data);\n\n case ActionType.response:\n return this.handleResponse(messages, data);\n\n case ActionType.finish:\n return this.handleFinish(messages, data);\n\n default:\n return messages;\n }\n }\n}\n\nconst useAgentGenerator = (params: UseAgentGeneratorProps) => {\n const {\n url,\n token,\n config,\n onError,\n onMessage,\n onSuccess,\n textSpeed = 55,\n ...rest\n } = params;\n\n // 聊天记录\n const [messages, setMessages] = useState<Messages[]>([]);\n // 聊天记录分页设置\n // const [messagePagination, setMessagePagination] = useState({ total: 0, pageNum: 1, pageSize: 999 });\n // 会话记录\n const [sessionList, setSessionList] = useState<sessionData[]>([]);\n // 会话请求是否加载中\n // const [sessionLoading, setSessionLoading] = useState<boolean>(false);\n // 会话分页设置\n const [sessionPagination, setSessionPagination] = useState({ total: 0, pageNum: 1, pageSize: SESSION_PAGE_SIZE });\n // 当前会话\n const [currentSessionId, setCurrentSessionId] = useState<string>('');\n // 应用 配置\n const [appInfo, setAppInfo] = useState<any>(null);\n // 请求 配置\n const requestInfo = useRef<{ requestId?: string; sensitiveWords?: string[] }>({});\n\n const { appNo } = config || {};\n\n // 消息处理器\n const messageProcessor = useMemo(() => new MessageProcessor(textSpeed), [textSpeed]);\n\n // 初始化时获取配置\n useEffect(() => {\n if (url && config) {\n const initConfig = async () => {\n try {\n const { data, result } = await fetchAppConfig({ url, ...config });\n if (result.code === API_SUCCESS_CODE) {\n setAppInfo(data);\n\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_CONFIG_INIT_SUCCESS,\n message: '初始化配置成功',\n });\n } else {\n onError?.({\n code: (result.code as ErrorCode) || ErrorCode.APP_NOT_FOUND,\n message: result.message || '获取应用配置失败',\n });\n }\n } catch (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) return;\n\n setMessages((prev) => messageProcessor.processResponse(prev, responseData));\n }, [responseData, messageProcessor]);\n\n // 添加对话(非交互触发)\n const setMessage = useCallback(async (messageType: string, content: any) => {\n switch (messageType) {\n case 'prologue': {\n setMessages((prev) => {\n const prologueIndex = prev.findIndex((item) => item.extra?.prologue);\n\n if (prologueIndex === -1) {\n const newMessage: TextMessage = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: new Date(),\n role: MessageRole.assistant,\n status: MessageStatus.done,\n content: { text: content },\n extra: { prologue: true, noFooter: true },\n };\n return [newMessage, ...prev];\n }\n\n return prev.map((item) => (item.extra?.prologue && item.content && 'text' in item.content\n ? { ...item, content: { text: content } } as TextMessage\n : item));\n });\n break;\n }\n\n case 'suggest': {\n setMessages((prev) => {\n const suggestIndex = prev.findIndex((item) => item.type === 'SuggestionMessage');\n const prologueIndex = prev.findIndex((item) => item.extra?.prologue);\n\n const newSuggestion: SuggestionMessage = {\n id: uuidV4(),\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content,\n };\n\n if (suggestIndex === -1) {\n const newMessages = [...prev];\n const insertIndex = prologueIndex === -1 ? 0 : prologueIndex + 1;\n newMessages.splice(insertIndex, 0, newSuggestion);\n return newMessages;\n }\n\n return prev.map((item) => (item.type === 'SuggestionMessage'\n ? { ...item, content }\n : item));\n });\n break;\n }\n\n default:\n console.warn(`Unknown message type: ${messageType}`);\n }\n }, []);\n\n // 简单对话\n const chat = async <T = any>(content: T, extra?: any, insert = true) => {\n if (insert) {\n const newMessage: Messages = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: new Date(),\n role: MessageRole.user,\n status: MessageStatus.done,\n extra,\n content: { text: content as string },\n };\n\n setMessages((prev) => {\n const newMessages = prev.filter((item) => item.type !== 'SuggestionMessage');\n newMessages.push(newMessage);\n return newMessages;\n });\n }\n\n const requestBody: any = {\n appParams: {\n inputs_msg: content,\n },\n sessionId: currentSessionId,\n };\n\n start(\n `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsg`,\n requestBody,\n {\n Authorization: `Bearer ${token}`,\n },\n );\n };\n\n // 重新生成方法\n const reChat = useCallback(() => {\n setMessages((prev) => {\n const newMessages = [...prev];\n\n // 删除最新 AI 消息\n const lastAIIndex = newMessages?.findLastIndex(\n (m) => m.role === MessageRole.assistant && m.type === 'TextMessage'\n );\n if (lastAIIndex !== -1) {\n newMessages.splice(lastAIIndex, 1);\n }\n\n // 删除建议消息\n const suggestIndex = newMessages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestIndex !== -1) {\n newMessages.splice(suggestIndex, 1);\n }\n\n // 找到最后一条用户消息重新发送\n const lastUserMsg = newMessages.findLast(\n (m) => m.role === MessageRole.user && m.type === 'TextMessage',\n ) as TextMessage | undefined;\n\n if (lastUserMsg?.content?.text) {\n setTimeout(() => {\n chat(lastUserMsg.content.text as string, lastUserMsg.extra, false);\n }, 0);\n }\n\n return newMessages;\n });\n }, [chat]);\n\n // 停止对话\n const stopChat = () => {\n stop();\n setMessages((prev) => prev.map((m) => {\n // 所有进行中的消息变更为结束\n if (m.status === MessageStatus.pending || m.status === MessageStatus.init) {\n const newMsg = { ...m, status: MessageStatus.done };\n if (m.type === 'TextMessage' && m.status === MessageStatus.init) {\n (newMsg as TextMessage).content.text = '<span style=\"color: #cbcbcb;\">用户已取消</span>';\n }\n return newMsg;\n }\n return m;\n }));\n };\n\n // 初始化历史记录\n const formatMessages = (data: any, init = false) => {\n setMessages((prev) => {\n const initMessagesList: Messages[] = [];\n data.forEach((item: any) => {\n const { content, messageTime, role } = item || {};\n\n if (role === 'USER') {\n const newMessage: Messages = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: messageTime,\n role: MessageRole.user,\n status: MessageStatus.done,\n content: {\n text: content,\n },\n };\n\n initMessagesList.push(newMessage);\n } else if (role === 'AI') {\n const newMessage: TextMessage = {\n id: uuidV4(),\n type: 'TextMessage',\n createdAt: messageTime,\n role: MessageRole.assistant,\n content: { text: content },\n execute: [],\n status: MessageStatus.done,\n isLike: item.isLike,\n raw: item.raw,\n };\n\n initMessagesList.push(newMessage);\n }\n });\n\n if (init) {\n return [...initMessagesList];\n }\n return [...prev, ...initMessagesList];\n });\n };\n\n // 初始化开场白\n const initPrologue = async () => {\n const { onboardingInfo = {} } = appInfo;\n // eslint-disable-next-line camelcase\n const { suggested_questions = [], prologue = '' } = onboardingInfo || {};\n\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 // 页面为空时展示开场白预设问题\n const hasMessages = messages.some((item) => (!item.extra?.prologue && item.type !== 'SuggestionMessage'));\n if (!hasMessages) {\n setMessage('suggest', suggestMessages);\n }\n } else {\n setMessages((prev) => prev.filter((item) => !(item.type === 'SuggestionMessage')));\n }\n };\n\n // 获取聊天记录\n const initAppConversations = async (fetchDetail = false) => {\n try {\n const { data = [], pagination, result } = await fetchSessionList({\n url,\n appNo,\n token,\n pageNum: sessionPagination.pageNum,\n pageSize: sessionPagination.pageSize,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n if (data.length > 0) {\n const formatSessions = data.map((item) => {\n return {\n key: item.sessionId,\n label: item.title || '新对话',\n timestamp: new Date(item.gmtCreated).getTime(),\n messages: [],\n meta: {\n ...item,\n },\n };\n });\n\n setSessionList(formatSessions);\n // 设置分页信息\n setSessionPagination({ pageNum: sessionPagination.pageNum, pageSize: sessionPagination.pageSize, total: pagination?.total || 0 });\n const { sessionId } = data?.[0];\n fetchDetail && setCurrentSessionDetail(sessionId);\n } else {\n // 页面报错 初始化\n setSessionList([]);\n setCurrentSessionId(uuidV4());\n initPrologue();\n }\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_MESSAGES_INIT_SUCCESS,\n message: '初始化聊天记录成功',\n });\n } else {\n initPrologue();\n }\n } catch {\n //\n }\n };\n\n // 设置当前会话详情\n const setCurrentSessionDetail = async (sessionId: string) => {\n if (sessionId) {\n if (sessionId === currentSessionId) {\n return;\n }\n setCurrentSessionId(sessionId); // 设置当前会话 id;\n const { data, result } = await fetchSessionDetail({\n url,\n appNo,\n sessionId,\n token,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n const sessionsData = data?.reduce((acc: any[], cur) => {\n const sessionMessages = Array.isArray(cur.sessionMessages) ? cur.sessionMessages : [];\n const msgs = sessionMessages.map((msg: any) => ({\n ...msg,\n raw: cur,\n isLike: cur?.isLike,\n }));\n return [...acc, ...msgs];\n }, []);\n\n if (sessionsData.length > 0) {\n formatMessages(sessionsData, true);\n }\n }\n } else {\n // 兼容 无 session异常\n setCurrentSessionId(uuidV4());\n }\n };\n\n // 删除会话\n const deleteSession = async (sessionId: string) => {\n if (!sessionId) return;\n const { result } = await delSessionId({\n url,\n appNo,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 删除成功后,重新获取会话列表\n initAppConversations(false);\n // 如果删除的是当前会话,则创建新的会话\n if (sessionId === currentSessionId) {\n createNewChat();\n }\n }\n };\n\n // 更新会话名称\n const updateSession = async (sessionId: string, title: string) => {\n if (!sessionId && !title) return;\n const { result } = await updateSessionTitle({\n url,\n appNo,\n title,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 编辑成功后,重新获取会话列表\n initAppConversations(false);\n }\n };\n\n // 生成新对话\n const createNewChat = () => {\n stopChat(); // 停止聊天\n setMessages([]); // 清空所有消息\n initPrologue(); // 初始化开场白和预置问题\n setCurrentSessionId(uuidV4()); // 设置会话 id\n };\n\n // 初始化应用\n useEffect(() => {\n if (appInfo) {\n // 初始化历史数据\n initAppConversations(true);\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 sessionList,\n currentSessionId,\n sessionPagination,\n initAppConversations,\n reChat,\n chat,\n createNewChat,\n setCurrentSessionId,\n setCurrentSessionDetail,\n updateSession,\n deleteSession,\n setMessage,\n setMessages,\n stopChat,\n initPrologue,\n };\n};\n\nexport default useAgentGenerator;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["ActionType", "ProcessStatus", "ActionAvailability", "documentIcon", "documentExpandIcon", "qaIcon", "qaExpandIcon", "skillNoIcon", "skillNoExpandIcon", "toolIcon", "toolExpandIcon", "uuidV4", "completedIcon", "completedExpandIcon"]
|
|
7
7
|
}
|