@ai-group/chat-sdk 0.2.8 → 0.3.0
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/XAiChatbot/index.js +14 -5
- package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
- package/dist/cjs/components/XAiChatbot/styles.d.ts +1 -0
- package/dist/cjs/components/XAiChatbot/styles.js +13 -0
- package/dist/cjs/components/XAiChatbot/styles.js.map +2 -2
- package/dist/cjs/components/XAiConversations/XAiConversations.stories.d.ts +6 -0
- package/dist/cjs/components/XAiConversations/XAiConversations.stories.js +82 -0
- package/dist/cjs/components/XAiConversations/XAiConversations.stories.js.map +7 -0
- package/dist/cjs/components/XAiConversations/index.d.ts +4 -0
- package/dist/cjs/components/XAiConversations/index.js +59 -0
- package/dist/cjs/components/XAiConversations/index.js.map +7 -0
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.d.ts +2 -2
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +12 -12
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +2 -2
- package/dist/cjs/components/XAiProvider/demo.styles.d.ts +35 -0
- package/dist/cjs/components/XAiProvider/demo.styles.js +37 -0
- package/dist/cjs/components/XAiProvider/demo.styles.js.map +7 -0
- package/dist/cjs/components/XAiProvider/index.js +7 -4
- package/dist/cjs/components/XAiProvider/index.js.map +3 -3
- package/dist/cjs/hooks/useAgentGenerator.d.ts +3 -0
- package/dist/cjs/hooks/useAgentGenerator.js +162 -69
- package/dist/cjs/hooks/useAgentGenerator.js.map +2 -2
- package/dist/cjs/services/api.d.ts +33 -0
- package/dist/cjs/services/api.js +33 -0
- package/dist/cjs/services/api.js.map +2 -2
- package/dist/cjs/styles/markdown.js +140 -138
- package/dist/cjs/styles/markdown.js.map +2 -2
- package/dist/cjs/types/XAiChatbot.d.ts +2 -0
- package/dist/cjs/types/XAiChatbot.js.map +1 -1
- package/dist/cjs/types/XAiConversations.d.ts +4 -0
- package/dist/cjs/types/XAiConversations.js +18 -0
- package/dist/cjs/types/XAiConversations.js.map +7 -0
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.js +3 -1
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/esm/components/XAiChatbot/index.js +22 -4
- package/dist/esm/components/XAiChatbot/index.js.map +1 -1
- package/dist/esm/components/XAiChatbot/styles.d.ts +1 -0
- package/dist/esm/components/XAiChatbot/styles.js +18 -17
- package/dist/esm/components/XAiChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAiConversations/XAiConversations.stories.d.ts +6 -0
- package/dist/esm/components/XAiConversations/XAiConversations.stories.js +42 -0
- package/dist/esm/components/XAiConversations/XAiConversations.stories.js.map +1 -0
- package/dist/esm/components/XAiConversations/index.d.ts +4 -0
- package/dist/esm/components/XAiConversations/index.js +27 -0
- package/dist/esm/components/XAiConversations/index.js.map +1 -0
- package/dist/esm/components/XAiProvider/XAiProvider.stories.d.ts +2 -2
- package/dist/esm/components/XAiProvider/XAiProvider.stories.js +38 -180
- package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +1 -1
- package/dist/esm/components/XAiProvider/demo.styles.d.ts +35 -0
- package/dist/esm/components/XAiProvider/demo.styles.js +12 -0
- package/dist/esm/components/XAiProvider/demo.styles.js.map +1 -0
- package/dist/esm/components/XAiProvider/index.js +14 -3
- package/dist/esm/components/XAiProvider/index.js.map +1 -1
- package/dist/esm/hooks/useAgentGenerator.d.ts +3 -0
- package/dist/esm/hooks/useAgentGenerator.js +268 -114
- package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
- package/dist/esm/services/api.d.ts +33 -0
- package/dist/esm/services/api.js +75 -0
- package/dist/esm/services/api.js.map +1 -1
- package/dist/esm/styles/markdown.js +1 -1
- package/dist/esm/styles/markdown.js.map +1 -1
- package/dist/esm/types/XAiChatbot.d.ts +2 -0
- package/dist/esm/types/XAiChatbot.js.map +1 -1
- package/dist/esm/types/XAiConversations.d.ts +4 -0
- package/dist/esm/types/XAiConversations.js +2 -0
- package/dist/esm/types/XAiConversations.js.map +1 -0
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAiProvider/XAiProvider.stories.tsx"],
|
|
4
|
-
"sourcesContent": ["import type { Meta, StoryObj } from '@storybook/react-vite';\nimport
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport XAiProvider from './index';\nimport XAiChatbot from '../XAiChatbot';\nimport XAiConversations from '../XAiConversations';\nimport useStyles from './demo.styles';\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 url: {\n control: 'text',\n description: 'AI 服务地址',\n },\n token: {\n control: 'text',\n description: '认证 token',\n },\n providerId: {\n control: 'text',\n description: 'Provider 唯一标识',\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 <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args}>\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 ),\n args: {\n url: 'http://ai-platform.xline-dev.test.xinke.biz',\n token: 'eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJkZGUzOTcwOS0wMDdlLTQ5YWItYjIzMy1iMTZmYzRkMDU2N2QiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQ1Njc4NTMsImV4cCI6MTc1NDU3NTA1MywidHlwZSI6ImFjY2VzcyIsImNsaWVudF9pZCI6IkFwcDE5NTAwMjA1OTQ0NTI2NjAyMjQiLCJzY29wZSI6ImFsbCIsInBsYXRmb3JtX3R5cGUiOiJNYWluU3RhdGlvbiJ9.jH9muK_MWcE9NtWxPJRqeoeGsnRf79B2oOpQjemJ6kY5_UjAT06BWlX3bszHeRbJbk1OM_kfCeugiO3Gokpj2A',\n config: {\n appNo: 'App1950020594452660224',\n pt: 'MainStation',\n tc: 'ZABX',\n },\n providerId: 'demo-provider',\n },\n};\n\n// export const 带历史记录聊天窗口: Story = {\n// render: (args) => {\n// function WithStyles(props: any) {\n// const styles = useStyles();\n// return (\n// <XAiProvider {...props}>\n// <div className={styles.wrapper}>\n// <div>\n// <XAiConversations />\n// </div>\n// <div>\n// <XAiChatbot />\n// </div>\n// </div>\n// </XAiProvider>\n// );\n// }\n// return <WithStyles {...args} />;\n// },\n// args: {\n// url: 'http://ai-platform.xline-dev.test.xinke.biz',\n// token: 'eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJjYWIxYjM3Ni03MmZjLTRkNWEtOTIzMC01N2U3NmZiMGI4NmQiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQzMTc1OTAsImV4cCI6MTc1NDkyMjM5MCwidHlwZSI6InJlZnJlc2giLCJjbGllbnRfaWQiOiJBcHAxOTUwMDIwNTk0NDUyNjYwMjI0Iiwic2NvcGUiOiJhbGwiLCJwbGF0Zm9ybV90eXBlIjoiTWFpblN0YXRpb24ifQ.crZFQRycuHHA1iIIFJ5ak9kS1-04Eqro-QWWG8HZj6Dz7DkLWYuQBPCrUlCtavGu0XW5tqHZ5WW4tdST06FvEA',\n// config: {\n// appNo: 'App1952213101022154752',\n// pt: 'MainStation',\n// tc: 'ZABX',\n// },\n// providerId: 'demo-provider',\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"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAElB,mBAAwB;AACxB,wBAAuB;AAIvB,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,KAAK;AAAA,MACH,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA,YAAY;AAAA,MACV,SAAS;AAAA,MACT,aAAa;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,QAAe;AAAA,EAC1B,QAAQ,CAAC,SACP,6BAAAA,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,SAAS,QAAQ,QAAQ,KAC5C,6BAAAA,QAAA,cAAC,aAAAD,SAAA,EAAa,GAAG,QACf,6BAAAC,QAAA;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA;AAAA,EACF,CACF,CACF;AAAA,EAEF,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,IACA,YAAY;AAAA,EACd;AACF;AAkCO,IAAM,QAAe;AAAA,EAC1B,QAAQ,CAAC,SACP,6BAAAD,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,OAAO,KACzC,6BAAAA,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,SAAS,QAAQ,QAAQ,KAC5C,6BAAAA,QAAA,cAAC,aAAAD,SAAA,EAAa,GAAG,MAAM,YAAW,gBAChC,6BAAAC,QAAA;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA;AAAA,EACF,CACF,CACF,GAEA,6BAAAD,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,SAAS,QAAQ,QAAQ,KAC5C,6BAAAA,QAAA,cAAC,aAAAD,SAAA,EAAa,GAAG,MAAM,YAAW,gBAChC,6BAAAC,QAAA;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA;AAAA,EACF,CACF,CACF,CACF;AAAA,EAEF,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AACF;",
|
|
6
6
|
"names": ["XAiProvider", "React", "XAiChatbot"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
declare const useStyles: () => {
|
|
2
|
+
wrapper: string;
|
|
3
|
+
} & {
|
|
4
|
+
w: (width: string | number) => string;
|
|
5
|
+
h: (height: string | number) => string;
|
|
6
|
+
p: (padding: string) => string;
|
|
7
|
+
pb: (padding: string | number) => string;
|
|
8
|
+
pt: (padding: string | number) => string;
|
|
9
|
+
pl: (padding: string | number) => string;
|
|
10
|
+
pr: (padding: string | number) => string;
|
|
11
|
+
m: (margin: string) => string;
|
|
12
|
+
mb: (margin: string | number) => string;
|
|
13
|
+
mt: (margin: string | number) => string;
|
|
14
|
+
ml: (margin: string | number) => string;
|
|
15
|
+
mr: (margin: string | number) => string;
|
|
16
|
+
text: (size: string | number) => string;
|
|
17
|
+
weight: (size: number) => string;
|
|
18
|
+
textColor: (c: string) => string;
|
|
19
|
+
bg: (c: string) => string;
|
|
20
|
+
rs: (radius: string | number) => string;
|
|
21
|
+
gap: (g: string | number) => string;
|
|
22
|
+
flex: string;
|
|
23
|
+
flexCenter: string;
|
|
24
|
+
flexBetween: string;
|
|
25
|
+
flexColumn: string;
|
|
26
|
+
flex1: string;
|
|
27
|
+
cursor: (type: string) => string;
|
|
28
|
+
border: (color: string, width?: string) => string;
|
|
29
|
+
boxShadow: (shadow: string) => string;
|
|
30
|
+
transition: (property?: string, duration?: string) => string;
|
|
31
|
+
overflow: (type: string) => string;
|
|
32
|
+
position: (type: string) => string;
|
|
33
|
+
zIndex: (index: number) => string;
|
|
34
|
+
};
|
|
35
|
+
export default useStyles;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/components/XAiProvider/demo.styles.tsx
|
|
20
|
+
var demo_styles_exports = {};
|
|
21
|
+
__export(demo_styles_exports, {
|
|
22
|
+
default: () => demo_styles_default
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(demo_styles_exports);
|
|
25
|
+
var import_css = require("@emotion/css");
|
|
26
|
+
var import_common = require("../../styles/common");
|
|
27
|
+
var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
28
|
+
// 静态样式
|
|
29
|
+
wrapper: import_css.css`
|
|
30
|
+
width: '100vw';
|
|
31
|
+
height: '100vh';
|
|
32
|
+
backgroundColor: rgb(240, 242, 245);
|
|
33
|
+
display: flex;
|
|
34
|
+
`
|
|
35
|
+
}));
|
|
36
|
+
var demo_styles_default = useStyles;
|
|
37
|
+
//# sourceMappingURL=demo.styles.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/XAiProvider/demo.styles.tsx"],
|
|
4
|
+
"sourcesContent": ["import { css } from '@emotion/css';\nimport { withBasicStyles } from '@/styles/common';\n\nconst useStyles = withBasicStyles(() => ({\n // 静态样式\n wrapper: css`\n width: '100vw';\n height: '100vh';\n backgroundColor: rgb(240, 242, 245);\n display: flex;\n `,\n}));\n\nexport default useStyles;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAoB;AACpB,oBAAgC;AAEhC,IAAM,gBAAY,+BAAgB,OAAO;AAAA;AAAA,EAEvC,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAMX,EAAE;AAEF,IAAO,sBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -34,6 +34,7 @@ __export(XAiProvider_exports, {
|
|
|
34
34
|
module.exports = __toCommonJS(XAiProvider_exports);
|
|
35
35
|
var import_react = __toESM(require("react"));
|
|
36
36
|
var import_antd = require("antd");
|
|
37
|
+
var import_uuid = require("uuid");
|
|
37
38
|
var import_copy_to_clipboard = __toESM(require("copy-to-clipboard"));
|
|
38
39
|
var import_x = require("@ant-design/x");
|
|
39
40
|
var import_AiProviderContext = require("../../context/AiProviderContext");
|
|
@@ -48,7 +49,7 @@ var XAiProvider = ({
|
|
|
48
49
|
onError,
|
|
49
50
|
children
|
|
50
51
|
}) => {
|
|
51
|
-
const { appInfo, chat, stopChat, reChat, messages, loading, setMessages } = (0, import_useAgentGenerator.default)({ url, token, config, onError, onSuccess });
|
|
52
|
+
const { appInfo, chat, stopChat, reChat, messages, loading, setCurrentSession, setMessages } = (0, import_useAgentGenerator.default)({ url, token, config, onError, onSuccess });
|
|
52
53
|
const { appName, icon } = appInfo || {};
|
|
53
54
|
const handleSendMessage = (_type, content) => {
|
|
54
55
|
chat(content);
|
|
@@ -56,6 +57,7 @@ var XAiProvider = ({
|
|
|
56
57
|
const handleClearMessage = () => {
|
|
57
58
|
stopChat();
|
|
58
59
|
setMessages([]);
|
|
60
|
+
setCurrentSession((0, import_uuid.v4)());
|
|
59
61
|
};
|
|
60
62
|
const handleActions = (index, actionData) => {
|
|
61
63
|
const { content, id } = actionData || {};
|
|
@@ -69,7 +71,7 @@ var XAiProvider = ({
|
|
|
69
71
|
import_antd.message.success("复制成功");
|
|
70
72
|
break;
|
|
71
73
|
case 2:
|
|
72
|
-
setMessages((prev) => prev.filter((item) => item.id !== id));
|
|
74
|
+
setMessages((prev) => prev.filter((item) => item.id !== id && item.type !== "SuggestionMessage"));
|
|
73
75
|
import_antd.message.success("删除成功");
|
|
74
76
|
break;
|
|
75
77
|
}
|
|
@@ -90,10 +92,11 @@ var XAiProvider = ({
|
|
|
90
92
|
import_AiProviderContext.XAiContext.Provider,
|
|
91
93
|
{
|
|
92
94
|
value: {
|
|
93
|
-
avatar: icon,
|
|
94
|
-
userAvatar: import_user.default,
|
|
95
|
+
avatar: /* @__PURE__ */ import_react.default.createElement("img", { src: icon, alt: "智能体头像" }),
|
|
96
|
+
userAvatar: /* @__PURE__ */ import_react.default.createElement("img", { src: import_user.default, alt: "用户头像" }),
|
|
95
97
|
emptyStateImage: icon,
|
|
96
98
|
emptyStateText: appName,
|
|
99
|
+
footerTips: "内容由AI生成,无法确保真实准确,仅供参考",
|
|
97
100
|
providerId,
|
|
98
101
|
token,
|
|
99
102
|
messages,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAiProvider/index.tsx"],
|
|
4
|
-
"sourcesContent": ["import React from 'react';\nimport { message, Divider } from 'antd';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport { XAiContext } from '@/context/AiProviderContext';\nimport { XAiProviderProps } from '@/types/XAiProvider';\nimport useAgentGenerator from '@/hooks/useAgentGenerator';\nimport userIcon from '@/assets/user.png';\n\nconst XAiProvider: React.FC<XAiProviderProps> = ({\n url,\n token,\n config,\n providerId = 'defaultId',\n onSuccess,\n onError,\n children,\n}: XAiProviderProps) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n const { appInfo, chat, stopChat, reChat, messages, loading, setMessages } = useAgentGenerator({ url, token, config, onError, onSuccess });\n\n const { appName, icon } = appInfo || {};\n\n // 发送消息\n const handleSendMessage = (_type: string, content: string) => {\n chat(content);\n };\n\n // 清空消息\n const handleClearMessage = () => {\n stopChat();\n setMessages([]);\n };\n\n // 工具栏按钮点击\n const handleActions = (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 setMessages((prev
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAiC;AACjC,+BAAiB;AACjB,eAA0B;AAC1B,+BAA2B;AAE3B,+BAA8B;AAC9B,kBAAqB;AAErB,IAAM,cAA0C,CAAC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AACF,MAAwB;AAEtB,QAAM,EAAE,SAAS,MAAM,UAAU,QAAQ,UAAU,SAAS,YAAY,QAAI,yBAAAA,SAAkB,EAAE,KAAK,OAAO,QAAQ,SAAS,UAAU,CAAC;
|
|
6
|
-
"names": ["useAgentGenerator", "copy", "React", "userIcon"]
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport { message, Divider } from 'antd';\nimport { v4 as uuidV4 } from 'uuid';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport { XAiContext } from '@/context/AiProviderContext';\nimport { XAiProviderProps } from '@/types/XAiProvider';\nimport useAgentGenerator from '@/hooks/useAgentGenerator';\nimport userIcon from '@/assets/user.png';\n\nconst XAiProvider: React.FC<XAiProviderProps> = ({\n url,\n token,\n config,\n providerId = 'defaultId',\n onSuccess,\n onError,\n children,\n}: XAiProviderProps) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n const { appInfo, chat, stopChat, reChat, messages, loading, setCurrentSession, setMessages } = useAgentGenerator({ url, token, config, onError, onSuccess });\n\n const { appName, icon } = appInfo || {};\n\n // 发送消息\n const handleSendMessage = (_type: string, content: string) => {\n chat(content);\n };\n\n // 清空消息\n const handleClearMessage = () => {\n stopChat();\n setMessages([]);\n setCurrentSession(uuidV4());\n };\n\n // 工具栏按钮点击\n const handleActions = (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 // 删除该条消息及建议类消息\n setMessages((prev) => prev.filter((item) => item.id !== id && item.type !== 'SuggestionMessage'));\n message.success('删除成功');\n break;\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 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 return (\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 token,\n messages,\n loading,\n error: null,\n messageTooltip: ToolTip,\n onSend: handleSendMessage,\n onClear: handleClearMessage,\n onStop: stopChat,\n onSuggestMessageClick: handleSuggestMessageClick,\n onMessagesActionsCallback: handleActions,\n isInProvider: true,\n }}\n >\n {children}\n </XAiContext.Provider>\n </XProvider>\n );\n};\n\nexport default XAiProvider;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAiC;AACjC,kBAA6B;AAC7B,+BAAiB;AACjB,eAA0B;AAC1B,+BAA2B;AAE3B,+BAA8B;AAC9B,kBAAqB;AAErB,IAAM,cAA0C,CAAC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AACF,MAAwB;AAEtB,QAAM,EAAE,SAAS,MAAM,UAAU,QAAQ,UAAU,SAAS,mBAAmB,YAAY,QAAI,yBAAAA,SAAkB,EAAE,KAAK,OAAO,QAAQ,SAAS,UAAU,CAAC;AAE3J,QAAM,EAAE,SAAS,KAAK,IAAI,WAAW,CAAC;AAGtC,QAAM,oBAAoB,CAAC,OAAe,YAAoB;AAC5D,SAAK,OAAO;AAAA,EACd;AAGA,QAAM,qBAAqB,MAAM;AAC/B,aAAS;AACT,gBAAY,CAAC,CAAC;AACd,0BAAkB,YAAAC,IAAO,CAAC;AAAA,EAC5B;AAGA,QAAM,gBAAgB,CAAC,OAAe,eAAoB;AACxD,UAAM,EAAE,SAAS,GAAG,IAAI,cAAc,CAAC;AACvC,UAAM,EAAE,OAAO,GAAG,IAAI;AACtB,YAAQ,OAAO;AAAA,MACb,KAAK;AACH,eAAO;AACP;AAAA,MACF,KAAK;AACH,qCAAAC,SAAK,IAAI;AACT,4BAAQ,QAAQ,MAAM;AACtB;AAAA,MACF,KAAK;AAEH,oBAAY,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,KAAK,OAAO,MAAM,KAAK,SAAS,mBAAmB,CAAC;AAChG,4BAAQ,QAAQ,MAAM;AACtB;AAAA,IACJ;AAAA,EACF;AAGA,QAAM,4BAA4B,CAAC,OAAY,OAAe;AAC5D,gBAAY,CAAC,SAAgB,KAAK,OAAO,CAAC,MAAW,EAAE,OAAO,EAAE,CAAC;AAAA,EACnE;AAEA,QAAM,UAAU,CAAC,gBAAqB;AACpC,UAAM,gBAAe,2CAAa,UAAS,CAAC,GAAG,KAAK,CAAC,SAAc,KAAK,eAAe,UAAU;AACjG,QAAI,CAAC;AAAa,aAAO;AACzB,UAAM,EAAE,MAAM,OAAO,WAAW,IAAI,YAAY,SAAS,CAAC;AAC1D,QAAI,CAAC,QAAQ,CAAC;AAAO,aAAO;AAC5B,WACE,6BAAAC,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,UAAU,QAAQ,OAAO,WAAW,MAAM,GAAG,cAAc,OAAO,KAClH,SAAS,UAAa,SAAS,QAAS,6BAAAA,QAAA,cAAC,aAAK,MAAK,GAAC,GACrD,cAAc,6BAAAA,QAAA,cAAC,uBAAQ,MAAK,YAAW,GACvC,cAAc,6BAAAA,QAAA,cAAC,aAAM,YAAY,SAAO,CAC5C;AAAA,EAEJ;AAEA,SACE,6BAAAA,QAAA,cAAC,0BACC,6BAAAA,QAAA;AAAA,IAAC,oCAAW;AAAA,IAAX;AAAA,MAAoB,OAAO;AAAA,QAC1B,QAAQ,6BAAAA,QAAA,cAAC,SAAI,KAAK,MAAM,KAAI,SAAQ;AAAA,QACpC,YAAY,6BAAAA,QAAA,cAAC,SAAI,KAAK,YAAAC,SAAU,KAAI,QAAO;AAAA,QAC3C,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,uBAAuB;AAAA,QACvB,2BAA2B;AAAA,QAC3B,cAAc;AAAA,MAChB;AAAA;AAAA,IAEG;AAAA,EACH,CACF;AAEJ;AAEA,IAAO,sBAAQ;",
|
|
6
|
+
"names": ["useAgentGenerator", "uuidV4", "copy", "React", "userIcon"]
|
|
7
7
|
}
|
|
@@ -63,8 +63,11 @@ declare const useAgentGenerator: ({ url, token, config, onError, onSuccess, }: U
|
|
|
63
63
|
messages: Messages[];
|
|
64
64
|
loading: boolean;
|
|
65
65
|
content: any;
|
|
66
|
+
sessionsList: any[];
|
|
67
|
+
currentSession: string;
|
|
66
68
|
reChat: () => void;
|
|
67
69
|
chat: (content: any) => Promise<void>;
|
|
70
|
+
setCurrentSession: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
68
71
|
setMessage: (messageType: string, content: any) => Promise<void>;
|
|
69
72
|
setMessages: import("react").Dispatch<import("react").SetStateAction<Messages[]>>;
|
|
70
73
|
stopChat: () => void;
|
|
@@ -83,6 +83,8 @@ var useAgentGenerator = ({
|
|
|
83
83
|
}) => {
|
|
84
84
|
const textSpeed = 60;
|
|
85
85
|
const [messages, setMessages] = (0, import_react.useState)([]);
|
|
86
|
+
const [sessionsList, setSessionList] = (0, import_react.useState)([]);
|
|
87
|
+
const [currentSession, setCurrentSession] = (0, import_react.useState)("");
|
|
86
88
|
const [appInfo, setAppInfo] = (0, import_react.useState)(null);
|
|
87
89
|
const requestInfo = (0, import_react.useRef)({});
|
|
88
90
|
const { appNo, pt, tc } = config || {};
|
|
@@ -301,69 +303,68 @@ var useAgentGenerator = ({
|
|
|
301
303
|
const setMessage = async (messageType, content) => {
|
|
302
304
|
switch (messageType) {
|
|
303
305
|
case "prologue": {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
306
|
+
setMessages((prev) => {
|
|
307
|
+
const prologueMessageIndex = prev.findIndex((item) => {
|
|
308
|
+
var _a;
|
|
309
|
+
return (_a = item.extra) == null ? void 0 : _a.prologue;
|
|
310
|
+
});
|
|
311
|
+
if (prologueMessageIndex === -1) {
|
|
312
|
+
const newMessage = {
|
|
313
|
+
type: "TextMessage",
|
|
314
|
+
id: (0, import_uuid.v4)(),
|
|
315
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
316
|
+
role: import_XAiMessage.MessageRole.assistant,
|
|
317
|
+
status: import_XAiMessage.MessageStatus.done,
|
|
318
|
+
content: {
|
|
319
|
+
text: content
|
|
320
|
+
},
|
|
321
|
+
extra: {
|
|
322
|
+
prologue: true,
|
|
323
|
+
noFooter: true
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
return [newMessage, ...prev];
|
|
327
|
+
}
|
|
328
|
+
return prev.map((item) => {
|
|
326
329
|
var _a;
|
|
327
330
|
if (((_a = item.extra) == null ? void 0 : _a.prologue) && item.content && "text" in item.content) {
|
|
328
331
|
item.content.text = content;
|
|
329
332
|
}
|
|
330
333
|
return item;
|
|
331
|
-
})
|
|
332
|
-
}
|
|
334
|
+
});
|
|
335
|
+
});
|
|
333
336
|
break;
|
|
334
337
|
}
|
|
335
338
|
case "suggest": {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
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;
|
|
339
|
+
setMessages((prev) => {
|
|
340
|
+
const suggestMessageIndex = prev.findIndex((item) => item.type === "SuggestionMessage");
|
|
341
|
+
if (suggestMessageIndex === -1) {
|
|
342
|
+
const prologueMessageIndex = prev.findIndex((item) => {
|
|
343
|
+
var _a;
|
|
344
|
+
return (_a = item.extra) == null ? void 0 : _a.prologue;
|
|
357
345
|
});
|
|
346
|
+
const newMessage = {
|
|
347
|
+
id: (0, import_uuid.v4)(),
|
|
348
|
+
type: "SuggestionMessage",
|
|
349
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
350
|
+
status: import_XAiMessage.MessageStatus.done,
|
|
351
|
+
role: import_XAiMessage.MessageRole.suggestion,
|
|
352
|
+
content
|
|
353
|
+
};
|
|
354
|
+
if (prologueMessageIndex === -1) {
|
|
355
|
+
return [newMessage, ...prev];
|
|
356
|
+
}
|
|
357
|
+
const newMessages = [...prev];
|
|
358
|
+
newMessages.splice(prologueMessageIndex + 1, 0, newMessage);
|
|
359
|
+
return newMessages;
|
|
358
360
|
}
|
|
359
|
-
|
|
360
|
-
setMessages((prev) => prev.map((item) => {
|
|
361
|
+
return prev.map((item) => {
|
|
361
362
|
if (item.type === "SuggestionMessage") {
|
|
362
363
|
item.content = content;
|
|
363
364
|
}
|
|
364
365
|
return item;
|
|
365
|
-
})
|
|
366
|
-
}
|
|
366
|
+
});
|
|
367
|
+
});
|
|
367
368
|
break;
|
|
368
369
|
}
|
|
369
370
|
default:
|
|
@@ -394,7 +395,8 @@ var useAgentGenerator = ({
|
|
|
394
395
|
{
|
|
395
396
|
appParams: {
|
|
396
397
|
inputs_msg: content
|
|
397
|
-
}
|
|
398
|
+
},
|
|
399
|
+
sessionId: currentSession
|
|
398
400
|
},
|
|
399
401
|
{
|
|
400
402
|
Authorization: `Bearer ${token}`
|
|
@@ -441,28 +443,116 @@ var useAgentGenerator = ({
|
|
|
441
443
|
return newMessages;
|
|
442
444
|
});
|
|
443
445
|
};
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
const
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
446
|
+
const formatMessages = (data) => {
|
|
447
|
+
setMessages((prev) => {
|
|
448
|
+
const initMessagesList = [];
|
|
449
|
+
data.forEach((item) => {
|
|
450
|
+
var _a;
|
|
451
|
+
const { content, messageTime, role } = item || {};
|
|
452
|
+
if (role === "USER") {
|
|
453
|
+
const newMessage = {
|
|
454
|
+
type: "TextMessage",
|
|
455
|
+
id: (0, import_uuid.v4)(),
|
|
456
|
+
createdAt: messageTime,
|
|
457
|
+
role: import_XAiMessage.MessageRole.user,
|
|
458
|
+
status: import_XAiMessage.MessageStatus.done,
|
|
459
|
+
content: {
|
|
460
|
+
text: content
|
|
461
|
+
}
|
|
462
|
+
};
|
|
463
|
+
initMessagesList.push(newMessage);
|
|
464
|
+
} else if (role === "AI") {
|
|
465
|
+
const contentObj = (0, import_utils.safeJsonParse)(content);
|
|
466
|
+
const newMessage = {
|
|
467
|
+
id: (0, import_uuid.v4)(),
|
|
468
|
+
type: "TextMessage",
|
|
469
|
+
createdAt: messageTime,
|
|
470
|
+
role: import_XAiMessage.MessageRole.assistant,
|
|
471
|
+
content: { text: (_a = contentObj == null ? void 0 : contentObj.result) == null ? void 0 : _a.result },
|
|
472
|
+
thinks: [],
|
|
473
|
+
status: import_XAiMessage.MessageStatus.done
|
|
474
|
+
};
|
|
475
|
+
initMessagesList.push(newMessage);
|
|
476
|
+
}
|
|
477
|
+
});
|
|
478
|
+
return [...prev, ...initMessagesList];
|
|
479
|
+
});
|
|
480
|
+
};
|
|
481
|
+
const initPrologue = async () => {
|
|
482
|
+
const { onboardingInfo = {} } = appInfo;
|
|
483
|
+
const { suggested_questions = [], prologue = "" } = onboardingInfo || {};
|
|
484
|
+
if (prologue) {
|
|
485
|
+
setMessage("prologue", prologue);
|
|
486
|
+
} else {
|
|
487
|
+
setMessages((prev) => prev.filter((item) => {
|
|
488
|
+
var _a;
|
|
489
|
+
return !((_a = item.extra) == null ? void 0 : _a.prologue);
|
|
490
|
+
}));
|
|
491
|
+
}
|
|
492
|
+
const formatSuggests = suggested_questions.filter((item) => item);
|
|
493
|
+
if (formatSuggests.length > 0) {
|
|
494
|
+
const suggestMessages = formatSuggests.map((item, index) => ({
|
|
495
|
+
key: index + 1,
|
|
496
|
+
description: item
|
|
497
|
+
}));
|
|
498
|
+
const hasMessages = messages.some((item) => {
|
|
499
|
+
var _a;
|
|
500
|
+
return !((_a = item.extra) == null ? void 0 : _a.prologue) && item.type !== "SuggestionMessage";
|
|
501
|
+
});
|
|
502
|
+
if (!hasMessages) {
|
|
462
503
|
setMessage("suggest", suggestMessages);
|
|
504
|
+
}
|
|
505
|
+
} else {
|
|
506
|
+
setMessages((prev) => prev.filter((item) => !(item.type === "SuggestionMessage")));
|
|
507
|
+
}
|
|
508
|
+
};
|
|
509
|
+
const initAppConversations = async () => {
|
|
510
|
+
var _a, _b, _c, _d;
|
|
511
|
+
try {
|
|
512
|
+
const result = await (0, import_api.fetchSessionList)({
|
|
513
|
+
url,
|
|
514
|
+
appNo,
|
|
515
|
+
pt,
|
|
516
|
+
tc,
|
|
517
|
+
token
|
|
518
|
+
});
|
|
519
|
+
if (result == null ? void 0 : result.success) {
|
|
520
|
+
if (((_a = result == null ? void 0 : result.data) == null ? void 0 : _a.length) > 0) {
|
|
521
|
+
setSessionList(result.data);
|
|
522
|
+
const { sessionId } = result.data[0];
|
|
523
|
+
if (sessionId) {
|
|
524
|
+
setCurrentSession(sessionId);
|
|
525
|
+
const sessionResult = await (0, import_api.fetchSessionDetail)({
|
|
526
|
+
url,
|
|
527
|
+
appNo,
|
|
528
|
+
pt,
|
|
529
|
+
tc,
|
|
530
|
+
sessionId,
|
|
531
|
+
token
|
|
532
|
+
});
|
|
533
|
+
if (sessionResult == null ? void 0 : sessionResult.success) {
|
|
534
|
+
const sessionsData = ((_d = (_c = (_b = sessionResult == null ? void 0 : sessionResult.data) == null ? void 0 : _b.list) == null ? void 0 : _c[0]) == null ? void 0 : _d.sessionMessages) || [];
|
|
535
|
+
if (sessionsData.length > 0) {
|
|
536
|
+
formatMessages(sessionsData);
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
} else {
|
|
540
|
+
setCurrentSession((0, import_uuid.v4)());
|
|
541
|
+
}
|
|
542
|
+
} else {
|
|
543
|
+
setSessionList([]);
|
|
544
|
+
setCurrentSession((0, import_uuid.v4)());
|
|
545
|
+
initPrologue();
|
|
546
|
+
}
|
|
463
547
|
} else {
|
|
464
|
-
|
|
548
|
+
initPrologue();
|
|
465
549
|
}
|
|
550
|
+
} catch {
|
|
551
|
+
}
|
|
552
|
+
};
|
|
553
|
+
(0, import_react.useEffect)(() => {
|
|
554
|
+
if (appInfo) {
|
|
555
|
+
initAppConversations();
|
|
466
556
|
}
|
|
467
557
|
}, [appInfo]);
|
|
468
558
|
return {
|
|
@@ -470,8 +560,11 @@ var useAgentGenerator = ({
|
|
|
470
560
|
messages,
|
|
471
561
|
loading,
|
|
472
562
|
content: responseData.content,
|
|
563
|
+
sessionsList,
|
|
564
|
+
currentSession,
|
|
473
565
|
reChat,
|
|
474
566
|
chat,
|
|
567
|
+
setCurrentSession,
|
|
475
568
|
setMessage,
|
|
476
569
|
setMessages,
|
|
477
570
|
stopChat
|