@ai-group/chat-sdk 3.2.1 → 3.3.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/README.md +89 -60
- package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +1 -6
- package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js +19 -3
- package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/index.js +36 -8
- package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.d.ts +5 -0
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +9 -4
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/Messages.d.ts +7 -0
- package/dist/cjs/components/XAdkProvider/compound/Messages.js +10 -4
- package/dist/cjs/components/XAdkProvider/compound/Messages.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/context/ChatStateContext.d.ts +3 -1
- package/dist/cjs/components/XAdkProvider/context/ChatStateContext.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/index.js +27 -3
- package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
- package/dist/cjs/components/XAdkSender/index.js +19 -13
- package/dist/cjs/components/XAdkSender/index.js.map +2 -2
- package/dist/cjs/components/XAdkThoughtChain/index.js +29 -8
- package/dist/cjs/components/XAdkThoughtChain/index.js.map +3 -3
- package/dist/cjs/hooks/useADKChat.d.ts +1 -1
- package/dist/cjs/hooks/useADKChat.js +3 -1
- package/dist/cjs/hooks/useADKChat.js.map +2 -2
- package/dist/cjs/index.d.ts +3 -2
- package/dist/cjs/index.js +20 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/presets/xGroupAdk.d.ts +20 -0
- package/dist/cjs/presets/xGroupAdk.js +131 -0
- package/dist/cjs/presets/xGroupAdk.js.map +7 -0
- package/dist/cjs/types/ChatStrategies.d.ts +45 -0
- package/dist/cjs/types/ChatStrategies.js +18 -0
- package/dist/cjs/types/ChatStrategies.js.map +7 -0
- package/dist/cjs/types/FunctionCallRender.d.ts +35 -0
- package/dist/cjs/types/FunctionCallRender.js +32 -0
- package/dist/cjs/types/FunctionCallRender.js.map +7 -0
- package/dist/cjs/types/XAdkChatbot.d.ts +32 -0
- package/dist/cjs/types/XAdkChatbot.js.map +1 -1
- package/dist/cjs/types/XAdkProvider.d.ts +19 -0
- package/dist/cjs/types/XAdkProvider.js.map +2 -2
- package/dist/cjs/types/XAdkSender.d.ts +20 -4
- package/dist/cjs/types/XAdkSender.js.map +1 -1
- package/dist/cjs/types/XAdkThoughtChain.d.ts +10 -2
- package/dist/cjs/types/XAdkThoughtChain.js.map +1 -1
- package/dist/cjs/types/XAiChatbot.d.ts +1 -1
- package/dist/cjs/types/XAiChatbot.js.map +1 -1
- package/dist/cjs/types/XAiProvider.d.ts +1 -1
- package/dist/cjs/types/XAiProvider.js.map +1 -1
- package/dist/cjs/types/index.d.ts +2 -0
- package/dist/cjs/types/index.js +5 -1
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/cjs/utils/providerManager.d.ts +1 -1
- package/dist/cjs/utils/providerManager.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +1 -6
- package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js +25 -5
- package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/index.js +35 -8
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.d.ts +5 -0
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +9 -4
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/Messages.d.ts +7 -0
- package/dist/esm/components/XAdkProvider/compound/Messages.js +14 -9
- package/dist/esm/components/XAdkProvider/compound/Messages.js.map +1 -1
- package/dist/esm/components/XAdkProvider/context/ChatStateContext.d.ts +3 -1
- package/dist/esm/components/XAdkProvider/context/ChatStateContext.js.map +1 -1
- package/dist/esm/components/XAdkProvider/index.js +21 -4
- package/dist/esm/components/XAdkProvider/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/index.js +26 -17
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/components/XAdkThoughtChain/index.js +23 -7
- package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -1
- package/dist/esm/hooks/useADKChat.d.ts +1 -1
- package/dist/esm/hooks/useADKChat.js +3 -1
- package/dist/esm/hooks/useADKChat.js.map +1 -1
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/presets/xGroupAdk.d.ts +20 -0
- package/dist/esm/presets/xGroupAdk.js +123 -0
- package/dist/esm/presets/xGroupAdk.js.map +1 -0
- package/dist/esm/types/ChatStrategies.d.ts +45 -0
- package/dist/esm/types/ChatStrategies.js +2 -0
- package/dist/esm/types/ChatStrategies.js.map +1 -0
- package/dist/esm/types/FunctionCallRender.d.ts +35 -0
- package/dist/esm/types/FunctionCallRender.js +14 -0
- package/dist/esm/types/FunctionCallRender.js.map +1 -0
- package/dist/esm/types/XAdkChatbot.d.ts +32 -0
- package/dist/esm/types/XAdkChatbot.js.map +1 -1
- package/dist/esm/types/XAdkProvider.d.ts +19 -0
- package/dist/esm/types/XAdkProvider.js.map +1 -1
- package/dist/esm/types/XAdkSender.d.ts +20 -4
- package/dist/esm/types/XAdkSender.js.map +1 -1
- package/dist/esm/types/XAdkThoughtChain.d.ts +10 -2
- package/dist/esm/types/XAdkThoughtChain.js.map +1 -1
- package/dist/esm/types/XAiChatbot.d.ts +1 -1
- package/dist/esm/types/XAiChatbot.js.map +1 -1
- package/dist/esm/types/XAiProvider.d.ts +1 -1
- package/dist/esm/types/XAiProvider.js.map +1 -1
- package/dist/esm/types/index.d.ts +2 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/providerManager.d.ts +1 -1
- package/dist/esm/utils/providerManager.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import type { ChatStrategies } from "../../../types";
|
|
2
3
|
/**
|
|
3
4
|
* XAdkProvider 默认布局
|
|
4
5
|
*
|
|
@@ -21,6 +22,10 @@ export interface DefaultLayoutProps {
|
|
|
21
22
|
showFnCallDetail?: boolean;
|
|
22
23
|
/** 自定义消息 Footer */
|
|
23
24
|
messagesFooter?: (msg: any) => React.ReactNode;
|
|
25
|
+
/** 自定义工具调用渲染函数,返回 null 则降级使用默认渲染 */
|
|
26
|
+
renderFunctionCall?: (msg: import("../../../types").IMessage) => React.ReactNode | null;
|
|
27
|
+
/** 局部策略覆盖,优先级高于 Provider preset/strategies */
|
|
28
|
+
strategies?: ChatStrategies;
|
|
24
29
|
}
|
|
25
30
|
declare const DefaultLayout: React.FC<DefaultLayoutProps>;
|
|
26
31
|
export default DefaultLayout;
|
|
@@ -22,7 +22,10 @@ var DefaultLayout = function DefaultLayout(_ref) {
|
|
|
22
22
|
_ref$allowUpload = _ref.allowUpload,
|
|
23
23
|
allowUpload = _ref$allowUpload === void 0 ? false : _ref$allowUpload,
|
|
24
24
|
_ref$clearBtnShow = _ref.clearBtnShow,
|
|
25
|
-
clearBtnShow = _ref$clearBtnShow === void 0 ? true : _ref$clearBtnShow
|
|
25
|
+
clearBtnShow = _ref$clearBtnShow === void 0 ? true : _ref$clearBtnShow,
|
|
26
|
+
showFnCallDetail = _ref.showFnCallDetail,
|
|
27
|
+
renderFunctionCall = _ref.renderFunctionCall,
|
|
28
|
+
strategies = _ref.strategies;
|
|
26
29
|
var _useChatState = useChatState(),
|
|
27
30
|
appInfo = _useChatState.appInfo,
|
|
28
31
|
messages = _useChatState.messages,
|
|
@@ -108,9 +111,11 @@ var DefaultLayout = function DefaultLayout(_ref) {
|
|
|
108
111
|
flex: 1,
|
|
109
112
|
overflow: "hidden"
|
|
110
113
|
},
|
|
111
|
-
children: /*#__PURE__*/_jsx(Messages
|
|
112
|
-
|
|
113
|
-
|
|
114
|
+
children: /*#__PURE__*/_jsx(Messages, {
|
|
115
|
+
showFnCallDetail: showFnCallDetail,
|
|
116
|
+
renderFunctionCall: renderFunctionCall,
|
|
117
|
+
strategies: strategies
|
|
118
|
+
})
|
|
114
119
|
}), /*#__PURE__*/_jsx("div", {
|
|
115
120
|
style: {
|
|
116
121
|
width: "100%",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useChatState","Sidebar","Messages","Welcome","Sender","jsx","_jsx","jsxs","_jsxs","DefaultLayout","_ref","_ref$showSessionList","showSessionList","header","footer","_ref$allowUpload","allowUpload","_ref$clearBtnShow","clearBtnShow","_useChatState","appInfo","messages","prologue","suggestions","isEmpty","length","style","display","height","width","position","overflow","children","isNarrow","flex","justifyContent","alignItems","flexDirection","maxWidth","padding","background","gap","appName","fontSize","fontWeight","color","transition","marginBottom","alignSelf","displayName"],"sources":["../../../../../src/components/XAdkProvider/compound/DefaultLayout.tsx"],"sourcesContent":["import React from \"react\";\nimport { useChatState } from \"../context/ChatStateContext\";\nimport Sidebar from \"./Sidebar\";\nimport Messages from \"./Messages\";\nimport Welcome from \"./Welcome\";\nimport Sender from \"./Sender\";\n\n/**\n * XAdkProvider 默认布局\n *\n * 提供类似 ChatGPT/DeepSeek 的默认布局:\n * - 左侧: 会话列表侧边栏 (可选,支持展开/收起)\n * - 右侧: 聊天区域 (标题 + 消息 + 输入框,居中显示,最大宽度800px)\n */\nexport interface DefaultLayoutProps {\n /** 是否显示会话列表 */\n showSessionList?: boolean;\n /** 自定义头部 */\n header?: React.ReactNode;\n /** 自定义底部 (替代默认 Sender) */\n footer?: React.ReactNode;\n /** 是否允许上传文件 */\n allowUpload?: boolean;\n /** 是否显示清空按钮 */\n clearBtnShow?: boolean;\n /** 是否显示函数调用详情 */\n showFnCallDetail?: boolean;\n /** 自定义消息 Footer */\n messagesFooter?: (msg: any) => React.ReactNode;\n}\n\nconst DefaultLayout: React.FC<DefaultLayoutProps> = ({\n showSessionList = false,\n header,\n footer,\n allowUpload = false,\n clearBtnShow = true,\n // showFnCallDetail = false,\n // messagesFooter,\n}) => {\n const { appInfo, messages, prologue, suggestions } = useChatState();\n\n // 判断是否为空状态(展示Welcome)\n const isEmpty =\n messages.length === 0 &&\n !prologue &&\n (!suggestions || suggestions.length === 0);\n\n return (\n <div\n style={{\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n overflow: \"hidden\",\n }}\n >\n {/* 左侧会话列表 - XAiConversations 组件会处理展开/收起 */}\n {showSessionList && <Sidebar isNarrow={false} />}\n\n {/* 右侧聊天区域 - 使用 flex: 1 自动占据剩余空间 */}\n <div\n style={{\n flex: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n }}\n >\n {/* 居中容器 - 最大宽度 800px */}\n <div\n style={{\n width: \"100%\",\n maxWidth: \"800px\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {/* 头部 */}\n {header ||\n (appInfo && (\n <div\n style={{\n padding: \"16px 24px\",\n display: \"flex\",\n justifyContent: \"center\",\n background: \"white\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"12px\",\n }}\n >\n {/* {appInfo.icon && (\n <img\n src={appInfo.icon}\n alt=\"应用图标\"\n style={{\n width: 32,\n height: 32,\n borderRadius: \"6px\",\n }}\n />\n )} */}\n {appInfo.appName && (\n <div>\n <div\n style={{\n fontSize: \"16px\",\n fontWeight: 500,\n color: \"#000\",\n }}\n >\n {appInfo.appName}\n </div>\n {/* {appInfo.description && (\n <div\n style={{\n fontSize: \"12px\",\n color: \"#999\",\n marginTop: \"2px\",\n }}\n >\n {appInfo.description}\n </div>\n )} */}\n </div>\n )}\n </div>\n </div>\n ))}\n\n {/* 消息区域或Welcome区域 */}\n <div\n style={{\n flex: 1,\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {/* 上方弹性占位 - Welcome状态时占据空间 */}\n <div\n style={{\n flex: isEmpty ? 1 : 0,\n transition: \"flex 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n />\n\n {/* Welcome 组件 - 只在空状态显示 */}\n {isEmpty && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n padding: \"0 24px\",\n marginBottom: \"24px\",\n }}\n >\n <Welcome />\n </div>\n )}\n\n {/* Messages 组件 - 只在非空状态显示 */}\n {!isEmpty && (\n <div\n style={{\n flex: 1,\n overflow: \"hidden\",\n }}\n >\n <Messages\n // footer={messagesFooter}\n />\n </div>\n )}\n\n {/* 输入区域 - 始终存在,通过样式控制位置 */}\n <div\n style={{\n width: \"100%\",\n maxWidth: isEmpty ? \"600px\" : \"100%\",\n alignSelf: \"center\",\n padding: isEmpty ? \"0 24px\" : \"0\",\n transition: \"all 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n >\n {footer || (\n <Sender allowUpload={allowUpload} clearBtnShow={clearBtnShow} />\n )}\n </div>\n\n {/* 下方弹性占位 - Welcome状态时占据更多空间,让内容偏上 */}\n <div\n style={{\n flex: isEmpty ? 1.5 : 0,\n transition: \"flex 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n />\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nDefaultLayout.displayName = \"XAdkProvider.DefaultLayout\";\n\nexport default DefaultLayout;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useChatState","Sidebar","Messages","Welcome","Sender","jsx","_jsx","jsxs","_jsxs","DefaultLayout","_ref","_ref$showSessionList","showSessionList","header","footer","_ref$allowUpload","allowUpload","_ref$clearBtnShow","clearBtnShow","showFnCallDetail","renderFunctionCall","strategies","_useChatState","appInfo","messages","prologue","suggestions","isEmpty","length","style","display","height","width","position","overflow","children","isNarrow","flex","justifyContent","alignItems","flexDirection","maxWidth","padding","background","gap","appName","fontSize","fontWeight","color","transition","marginBottom","alignSelf","displayName"],"sources":["../../../../../src/components/XAdkProvider/compound/DefaultLayout.tsx"],"sourcesContent":["import React from \"react\";\nimport { useChatState } from \"../context/ChatStateContext\";\nimport Sidebar from \"./Sidebar\";\nimport Messages from \"./Messages\";\nimport Welcome from \"./Welcome\";\nimport Sender from \"./Sender\";\nimport type { ChatStrategies } from \"@/types\";\n\n/**\n * XAdkProvider 默认布局\n *\n * 提供类似 ChatGPT/DeepSeek 的默认布局:\n * - 左侧: 会话列表侧边栏 (可选,支持展开/收起)\n * - 右侧: 聊天区域 (标题 + 消息 + 输入框,居中显示,最大宽度800px)\n */\nexport interface DefaultLayoutProps {\n /** 是否显示会话列表 */\n showSessionList?: boolean;\n /** 自定义头部 */\n header?: React.ReactNode;\n /** 自定义底部 (替代默认 Sender) */\n footer?: React.ReactNode;\n /** 是否允许上传文件 */\n allowUpload?: boolean;\n /** 是否显示清空按钮 */\n clearBtnShow?: boolean;\n /** 是否显示函数调用详情 */\n showFnCallDetail?: boolean;\n /** 自定义消息 Footer */\n messagesFooter?: (msg: any) => React.ReactNode;\n /** 自定义工具调用渲染函数,返回 null 则降级使用默认渲染 */\n renderFunctionCall?: (msg: import(\"@/types\").IMessage) => React.ReactNode | null;\n /** 局部策略覆盖,优先级高于 Provider preset/strategies */\n strategies?: ChatStrategies;\n}\n\nconst DefaultLayout: React.FC<DefaultLayoutProps> = ({\n showSessionList = false,\n header,\n footer,\n allowUpload = false,\n clearBtnShow = true,\n showFnCallDetail,\n renderFunctionCall,\n strategies,\n}) => {\n const { appInfo, messages, prologue, suggestions } = useChatState();\n\n // 判断是否为空状态(展示Welcome)\n const isEmpty =\n messages.length === 0 &&\n !prologue &&\n (!suggestions || suggestions.length === 0);\n\n return (\n <div\n style={{\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n overflow: \"hidden\",\n }}\n >\n {/* 左侧会话列表 - XAiConversations 组件会处理展开/收起 */}\n {showSessionList && <Sidebar isNarrow={false} />}\n\n {/* 右侧聊天区域 - 使用 flex: 1 自动占据剩余空间 */}\n <div\n style={{\n flex: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n }}\n >\n {/* 居中容器 - 最大宽度 800px */}\n <div\n style={{\n width: \"100%\",\n maxWidth: \"800px\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {/* 头部 */}\n {header ||\n (appInfo && (\n <div\n style={{\n padding: \"16px 24px\",\n display: \"flex\",\n justifyContent: \"center\",\n background: \"white\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"12px\",\n }}\n >\n {/* {appInfo.icon && (\n <img\n src={appInfo.icon}\n alt=\"应用图标\"\n style={{\n width: 32,\n height: 32,\n borderRadius: \"6px\",\n }}\n />\n )} */}\n {appInfo.appName && (\n <div>\n <div\n style={{\n fontSize: \"16px\",\n fontWeight: 500,\n color: \"#000\",\n }}\n >\n {appInfo.appName}\n </div>\n {/* {appInfo.description && (\n <div\n style={{\n fontSize: \"12px\",\n color: \"#999\",\n marginTop: \"2px\",\n }}\n >\n {appInfo.description}\n </div>\n )} */}\n </div>\n )}\n </div>\n </div>\n ))}\n\n {/* 消息区域或Welcome区域 */}\n <div\n style={{\n flex: 1,\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {/* 上方弹性占位 - Welcome状态时占据空间 */}\n <div\n style={{\n flex: isEmpty ? 1 : 0,\n transition: \"flex 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n />\n\n {/* Welcome 组件 - 只在空状态显示 */}\n {isEmpty && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n padding: \"0 24px\",\n marginBottom: \"24px\",\n }}\n >\n <Welcome />\n </div>\n )}\n\n {/* Messages 组件 - 只在非空状态显示 */}\n {!isEmpty && (\n <div\n style={{\n flex: 1,\n overflow: \"hidden\",\n }}\n >\n <Messages\n showFnCallDetail={showFnCallDetail}\n renderFunctionCall={renderFunctionCall}\n strategies={strategies}\n />\n </div>\n )}\n\n {/* 输入区域 - 始终存在,通过样式控制位置 */}\n <div\n style={{\n width: \"100%\",\n maxWidth: isEmpty ? \"600px\" : \"100%\",\n alignSelf: \"center\",\n padding: isEmpty ? \"0 24px\" : \"0\",\n transition: \"all 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n >\n {footer || (\n <Sender allowUpload={allowUpload} clearBtnShow={clearBtnShow} />\n )}\n </div>\n\n {/* 下方弹性占位 - Welcome状态时占据更多空间,让内容偏上 */}\n <div\n style={{\n flex: isEmpty ? 1.5 : 0,\n transition: \"flex 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n />\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nDefaultLayout.displayName = \"XAdkProvider.DefaultLayout\";\n\nexport default DefaultLayout;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,YAAY;AACrB,OAAOC,OAAO;AACd,OAAOC,QAAQ;AACf,OAAOC,OAAO;AACd,OAAOC,MAAM;;AAGb;AACA;AACA;AACA;AACA;AACA;AACA;AANA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AA4BA,IAAMC,aAA2C,GAAG,SAA9CA,aAA2CA,CAAAC,IAAA,EAS3C;EAAA,IAAAC,oBAAA,GAAAD,IAAA,CARJE,eAAe;IAAfA,eAAe,GAAAD,oBAAA,cAAG,KAAK,GAAAA,oBAAA;IACvBE,MAAM,GAAAH,IAAA,CAANG,MAAM;IACNC,MAAM,GAAAJ,IAAA,CAANI,MAAM;IAAAC,gBAAA,GAAAL,IAAA,CACNM,WAAW;IAAXA,WAAW,GAAAD,gBAAA,cAAG,KAAK,GAAAA,gBAAA;IAAAE,iBAAA,GAAAP,IAAA,CACnBQ,YAAY;IAAZA,YAAY,GAAAD,iBAAA,cAAG,IAAI,GAAAA,iBAAA;IACnBE,gBAAgB,GAAAT,IAAA,CAAhBS,gBAAgB;IAChBC,kBAAkB,GAAAV,IAAA,CAAlBU,kBAAkB;IAClBC,UAAU,GAAAX,IAAA,CAAVW,UAAU;EAEV,IAAAC,aAAA,GAAqDtB,YAAY,CAAC,CAAC;IAA3DuB,OAAO,GAAAD,aAAA,CAAPC,OAAO;IAAEC,QAAQ,GAAAF,aAAA,CAARE,QAAQ;IAAEC,QAAQ,GAAAH,aAAA,CAARG,QAAQ;IAAEC,WAAW,GAAAJ,aAAA,CAAXI,WAAW;;EAEhD;EACA,IAAMC,OAAO,GACXH,QAAQ,CAACI,MAAM,KAAK,CAAC,IACrB,CAACH,QAAQ,KACR,CAACC,WAAW,IAAIA,WAAW,CAACE,MAAM,KAAK,CAAC,CAAC;EAE5C,oBACEpB,KAAA;IACEqB,KAAK,EAAE;MACLC,OAAO,EAAE,MAAM;MACfC,MAAM,EAAE,MAAM;MACdC,KAAK,EAAE,MAAM;MACbC,QAAQ,EAAE,UAAU;MACpBC,QAAQ,EAAE;IACZ,CAAE;IAAAC,QAAA,GAGDvB,eAAe,iBAAIN,IAAA,CAACL,OAAO;MAACmC,QAAQ,EAAE;IAAM,CAAE,CAAC,eAGhD9B,IAAA;MACEuB,KAAK,EAAE;QACLQ,IAAI,EAAE,CAAC;QACPP,OAAO,EAAE,MAAM;QACfQ,cAAc,EAAE,QAAQ;QACxBC,UAAU,EAAE,QAAQ;QACpBC,aAAa,EAAE,QAAQ;QACvBN,QAAQ,EAAE;MACZ,CAAE;MAAAC,QAAA,eAGF3B,KAAA;QACEqB,KAAK,EAAE;UACLG,KAAK,EAAE,MAAM;UACbS,QAAQ,EAAE,OAAO;UACjBV,MAAM,EAAE,MAAM;UACdD,OAAO,EAAE,MAAM;UACfU,aAAa,EAAE;QACjB,CAAE;QAAAL,QAAA,GAGDtB,MAAM,IACJU,OAAO,iBACNjB,IAAA;UACEuB,KAAK,EAAE;YACLa,OAAO,EAAE,WAAW;YACpBZ,OAAO,EAAE,MAAM;YACfQ,cAAc,EAAE,QAAQ;YACxBK,UAAU,EAAE;UACd,CAAE;UAAAR,QAAA,eAEF7B,IAAA;YACEuB,KAAK,EAAE;cACLC,OAAO,EAAE,MAAM;cACfS,UAAU,EAAE,QAAQ;cACpBK,GAAG,EAAE;YACP,CAAE;YAAAT,QAAA,EAaDZ,OAAO,CAACsB,OAAO,iBACdvC,IAAA;cAAA6B,QAAA,eACE7B,IAAA;gBACEuB,KAAK,EAAE;kBACLiB,QAAQ,EAAE,MAAM;kBAChBC,UAAU,EAAE,GAAG;kBACfC,KAAK,EAAE;gBACT,CAAE;gBAAAb,QAAA,EAEDZ,OAAO,CAACsB;cAAO,CACb;YAAC,CAYH;UACN,CACE;QAAC,CACH,CACL,eAGJrC,KAAA;UACEqB,KAAK,EAAE;YACLQ,IAAI,EAAE,CAAC;YACPH,QAAQ,EAAE,QAAQ;YAClBJ,OAAO,EAAE,MAAM;YACfU,aAAa,EAAE;UACjB,CAAE;UAAAL,QAAA,gBAGF7B,IAAA;YACEuB,KAAK,EAAE;cACLQ,IAAI,EAAEV,OAAO,GAAG,CAAC,GAAG,CAAC;cACrBsB,UAAU,EAAE;YACd;UAAE,CACH,CAAC,EAGDtB,OAAO,iBACNrB,IAAA;YACEuB,KAAK,EAAE;cACLC,OAAO,EAAE,MAAM;cACfU,aAAa,EAAE,QAAQ;cACvBD,UAAU,EAAE,QAAQ;cACpBG,OAAO,EAAE,QAAQ;cACjBQ,YAAY,EAAE;YAChB,CAAE;YAAAf,QAAA,eAEF7B,IAAA,CAACH,OAAO,IAAE;UAAC,CACR,CACN,EAGA,CAACwB,OAAO,iBACPrB,IAAA;YACEuB,KAAK,EAAE;cACLQ,IAAI,EAAE,CAAC;cACPH,QAAQ,EAAE;YACZ,CAAE;YAAAC,QAAA,eAEF7B,IAAA,CAACJ,QAAQ;cACPiB,gBAAgB,EAAEA,gBAAiB;cACnCC,kBAAkB,EAAEA,kBAAmB;cACvCC,UAAU,EAAEA;YAAW,CACxB;UAAC,CACC,CACN,eAGDf,IAAA;YACEuB,KAAK,EAAE;cACLG,KAAK,EAAE,MAAM;cACbS,QAAQ,EAAEd,OAAO,GAAG,OAAO,GAAG,MAAM;cACpCwB,SAAS,EAAE,QAAQ;cACnBT,OAAO,EAAEf,OAAO,GAAG,QAAQ,GAAG,GAAG;cACjCsB,UAAU,EAAE;YACd,CAAE;YAAAd,QAAA,EAEDrB,MAAM,iBACLR,IAAA,CAACF,MAAM;cAACY,WAAW,EAAEA,WAAY;cAACE,YAAY,EAAEA;YAAa,CAAE;UAChE,CACE,CAAC,eAGNZ,IAAA;YACEuB,KAAK,EAAE;cACLQ,IAAI,EAAEV,OAAO,GAAG,GAAG,GAAG,CAAC;cACvBsB,UAAU,EAAE;YACd;UAAE,CACH,CAAC;QAAA,CACC,CAAC;MAAA,CACH;IAAC,CACH,CAAC;EAAA,CACH,CAAC;AAEV,CAAC;AAEDxC,aAAa,CAAC2C,WAAW,GAAG,4BAA4B;AAExD,eAAe3C,aAAa"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { ActionProps } from "../../../types";
|
|
3
|
+
import type { ChatStrategies } from "../../../types";
|
|
3
4
|
export interface XAdkMessagesProps {
|
|
4
5
|
/** 自定义操作栏渲染 */
|
|
5
6
|
actions?: ActionProps;
|
|
@@ -7,6 +8,12 @@ export interface XAdkMessagesProps {
|
|
|
7
8
|
className?: string;
|
|
8
9
|
/** 样式 */
|
|
9
10
|
style?: React.CSSProperties;
|
|
11
|
+
/** 是否显示函数调用详情 */
|
|
12
|
+
showFnCallDetail?: boolean;
|
|
13
|
+
/** 自定义工具调用渲染函数,返回 null 则降级使用默认渲染 */
|
|
14
|
+
renderFunctionCall?: (msg: import("../../../types").IMessage) => React.ReactNode | null;
|
|
15
|
+
/** 局部策略覆盖,优先级高于 Provider preset/strategies */
|
|
16
|
+
strategies?: ChatStrategies;
|
|
10
17
|
}
|
|
11
18
|
/**
|
|
12
19
|
* Messages - XAdkProvider 的消息展示组件
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
1
2
|
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
2
3
|
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
3
4
|
import React, { useCallback } from "react";
|
|
@@ -19,7 +20,10 @@ import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
19
20
|
var Messages = function Messages(_ref) {
|
|
20
21
|
var actions = _ref.actions,
|
|
21
22
|
className = _ref.className,
|
|
22
|
-
style = _ref.style
|
|
23
|
+
style = _ref.style,
|
|
24
|
+
showFnCallDetail = _ref.showFnCallDetail,
|
|
25
|
+
renderFunctionCall = _ref.renderFunctionCall,
|
|
26
|
+
strategiesProp = _ref.strategies;
|
|
23
27
|
var _useChatState = useChatState(),
|
|
24
28
|
messages = _useChatState.messages,
|
|
25
29
|
loading = _useChatState.loading,
|
|
@@ -28,7 +32,8 @@ var Messages = function Messages(_ref) {
|
|
|
28
32
|
initialized = _useChatState.initialized,
|
|
29
33
|
showFeedback = _useChatState.showFeedback,
|
|
30
34
|
appInfo = _useChatState.appInfo,
|
|
31
|
-
onFileClick = _useChatState.onFileClick
|
|
35
|
+
onFileClick = _useChatState.onFileClick,
|
|
36
|
+
strategies = _useChatState.strategies;
|
|
32
37
|
var _useChatActions = useChatActions(),
|
|
33
38
|
suggestChat = _useChatActions.suggestChat,
|
|
34
39
|
reChat = _useChatActions.reChat,
|
|
@@ -152,13 +157,9 @@ var Messages = function Messages(_ref) {
|
|
|
152
157
|
// 启用分组和解析
|
|
153
158
|
,
|
|
154
159
|
enableGrouping: true,
|
|
155
|
-
enableProcessParsing: true
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
parseOptions: {
|
|
159
|
-
mode: "comment"
|
|
160
|
-
},
|
|
161
|
-
initialized: initialized
|
|
160
|
+
enableProcessParsing: true,
|
|
161
|
+
initialized: initialized,
|
|
162
|
+
showFnCallDetail: showFnCallDetail
|
|
162
163
|
// 文件点击回调
|
|
163
164
|
,
|
|
164
165
|
onFileClick: onFileClick
|
|
@@ -166,6 +167,10 @@ var Messages = function Messages(_ref) {
|
|
|
166
167
|
,
|
|
167
168
|
className: className,
|
|
168
169
|
style: style
|
|
170
|
+
// 自定义工具调用渲染
|
|
171
|
+
,
|
|
172
|
+
renderFunctionCall: renderFunctionCall,
|
|
173
|
+
strategies: _objectSpread(_objectSpread({}, strategies), strategiesProp)
|
|
169
174
|
});
|
|
170
175
|
};
|
|
171
176
|
export default Messages;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","message","Tooltip","Flex","LikeFilled","LikeOutlined","ReloadOutlined","CopyOutlined","copy","XAdkChatbot","DislikeFeedback","useChatState","useChatActions","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Messages","_ref","actions","className","style","_useChatState","messages","loading","prologue","suggestions","initialized","showFeedback","appInfo","onFileClick","_useChatActions","suggestChat","reChat","likeMessage","confirmFnCall","primaryColor","appTheme","defaultActions","_ref2","_group$isLike","group","isLastBotMsg","lastMsg","msgs","length","invocationId","isLikeVal","isLike","fullText","filter","m","functionCall","functionResponse","map","text","join","gap","align","padding","color","children","title","cursor","onClick","success","_asyncToGenerator","_regeneratorRuntime","mark","_callee","ok","wrap","_callee$","_context","prev","next","warning","abrupt","sent","error","stop","msg","activeColor","onSubmit","_ref4","_callee2","formData","_callee2$","_context2","_x","apply","arguments","onSuggest","onConfirm","enableGrouping","enableProcessParsing","parseOptions","mode"],"sources":["../../../../../src/components/XAdkProvider/compound/Messages.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { message, Tooltip, Flex } from \"antd\";\nimport {\n LikeFilled,\n LikeOutlined,\n ReloadOutlined,\n CopyOutlined,\n} from \"@ant-design/icons\";\nimport copy from \"copy-to-clipboard\";\nimport XAdkChatbot from \"../../XAdkChatbot\";\nimport DislikeFeedback from \"./DislikeFeedBack\";\nimport { useChatState } from \"../context/ChatStateContext\";\nimport { useChatActions } from \"../context/ChatActionContext\";\nimport type { ActionProps } from \"@/types\";\n\nexport interface XAdkMessagesProps {\n /** 自定义操作栏渲染 */\n actions?: ActionProps;\n /** 类名 */\n className?: string;\n /** 样式 */\n style?: React.CSSProperties;\n}\n\n/**\n * Messages - XAdkProvider 的消息展示组件\n *\n * 使用 XAdkChatbot 渲染消息列表\n */\nconst Messages: React.FC<XAdkMessagesProps> = ({\n actions,\n className,\n style,\n}) => {\n const {\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n showFeedback,\n appInfo,\n onFileClick,\n } = useChatState();\n const { suggestChat, reChat, likeMessage, confirmFnCall } = useChatActions();\n\n const primaryColor = appInfo?.appTheme || \"#1677ff\";\n\n const defaultActions = useCallback<ActionProps>(\n ({ message: group, isLastBotMsg }) => {\n // 取该组最后一条 bot 消息的 invocationId 和 isLike 状态\n const lastMsg = group.msgs[group.msgs.length - 1];\n const invocationId = lastMsg?.invocationId;\n const isLikeVal = group.isLike ?? 0;\n\n const fullText = group.msgs\n .filter((m) => !m.functionCall && !m.functionResponse)\n .map((m) => m.text || \"\")\n .join(\"\");\n\n return (\n <Flex\n gap={16}\n align=\"center\"\n style={{ padding: \"4px 0\", color: \"#81858c\" }}\n >\n {isLastBotMsg && (\n <Tooltip title=\"重新生成\">\n <ReloadOutlined style={{ cursor: \"pointer\" }} onClick={reChat} />\n </Tooltip>\n )}\n <Tooltip title=\"复制内容\">\n <CopyOutlined\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n copy(fullText);\n message.success(\"复制成功\");\n }}\n />\n </Tooltip>\n {showFeedback && invocationId && (\n <>\n <Tooltip title=\"赞\">\n {isLikeVal === 1 ? (\n <LikeFilled\n style={{ color: primaryColor, cursor: \"pointer\" }}\n />\n ) : (\n <LikeOutlined\n style={{ cursor: \"pointer\" }}\n onClick={async () => {\n if (isLikeVal !== 0) {\n message.warning(\"已收到您的反馈,无需重复提交\");\n return;\n }\n const ok = await likeMessage(invocationId, 1);\n if (ok) message.success(\"感谢您的反馈\");\n else message.error(\"反馈失败,请稍后再试\");\n }}\n />\n )}\n </Tooltip>\n <DislikeFeedback\n msg={group}\n activeColor={primaryColor}\n onSubmit={async (formData) => {\n const ok = await likeMessage(invocationId, -1, formData);\n if (ok) message.success(\"已收到您的反馈,我们会努力做得更好\");\n else message.error(\"反馈失败,请稍后再试\");\n return ok;\n }}\n />\n </>\n )}\n </Flex>\n );\n },\n [reChat, likeMessage, showFeedback, primaryColor],\n );\n\n return (\n <XAdkChatbot\n messages={messages}\n loading={loading}\n prologue={prologue}\n suggestions={suggestions}\n onSuggest={suggestChat}\n onConfirm={confirmFnCall}\n // 操作栏:使用外部传入的 actions,否则用内置默认 actions\n actions={actions ?? defaultActions}\n // 启用分组和解析\n enableGrouping={true}\n enableProcessParsing={true}\n // 使用注释模式解析\n parseOptions={{ mode: \"comment\" }}\n initialized={initialized}\n // 文件点击回调\n onFileClick={onFileClick}\n // 样式\n className={className}\n style={style}\n />\n );\n};\n\nexport default Messages;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useCallback","message","Tooltip","Flex","LikeFilled","LikeOutlined","ReloadOutlined","CopyOutlined","copy","XAdkChatbot","DislikeFeedback","useChatState","useChatActions","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Messages","_ref","actions","className","style","showFnCallDetail","renderFunctionCall","strategiesProp","strategies","_useChatState","messages","loading","prologue","suggestions","initialized","showFeedback","appInfo","onFileClick","_useChatActions","suggestChat","reChat","likeMessage","confirmFnCall","primaryColor","appTheme","defaultActions","_ref2","_group$isLike","group","isLastBotMsg","lastMsg","msgs","length","invocationId","isLikeVal","isLike","fullText","filter","m","functionCall","functionResponse","map","text","join","gap","align","padding","color","children","title","cursor","onClick","success","_asyncToGenerator","_regeneratorRuntime","mark","_callee","ok","wrap","_callee$","_context","prev","next","warning","abrupt","sent","error","stop","msg","activeColor","onSubmit","_ref4","_callee2","formData","_callee2$","_context2","_x","apply","arguments","onSuggest","onConfirm","enableGrouping","enableProcessParsing","_objectSpread"],"sources":["../../../../../src/components/XAdkProvider/compound/Messages.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { message, Tooltip, Flex } from \"antd\";\nimport {\n LikeFilled,\n LikeOutlined,\n ReloadOutlined,\n CopyOutlined,\n} from \"@ant-design/icons\";\nimport copy from \"copy-to-clipboard\";\nimport XAdkChatbot from \"../../XAdkChatbot\";\nimport DislikeFeedback from \"./DislikeFeedBack\";\nimport { useChatState } from \"../context/ChatStateContext\";\nimport { useChatActions } from \"../context/ChatActionContext\";\nimport type { ActionProps } from \"@/types\";\nimport type { ChatStrategies } from \"@/types\";\n\nexport interface XAdkMessagesProps {\n /** 自定义操作栏渲染 */\n actions?: ActionProps;\n /** 类名 */\n className?: string;\n /** 样式 */\n style?: React.CSSProperties;\n /** 是否显示函数调用详情 */\n showFnCallDetail?: boolean;\n /** 自定义工具调用渲染函数,返回 null 则降级使用默认渲染 */\n renderFunctionCall?: (msg: import(\"@/types\").IMessage) => React.ReactNode | null;\n /** 局部策略覆盖,优先级高于 Provider preset/strategies */\n strategies?: ChatStrategies;\n}\n\n/**\n * Messages - XAdkProvider 的消息展示组件\n *\n * 使用 XAdkChatbot 渲染消息列表\n */\nconst Messages: React.FC<XAdkMessagesProps> = ({\n actions,\n className,\n style,\n showFnCallDetail,\n renderFunctionCall,\n strategies: strategiesProp,\n}) => {\n const {\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n showFeedback,\n appInfo,\n onFileClick,\n strategies,\n } = useChatState();\n const { suggestChat, reChat, likeMessage, confirmFnCall } = useChatActions();\n\n const primaryColor = appInfo?.appTheme || \"#1677ff\";\n\n const defaultActions = useCallback<ActionProps>(\n ({ message: group, isLastBotMsg }) => {\n // 取该组最后一条 bot 消息的 invocationId 和 isLike 状态\n const lastMsg = group.msgs[group.msgs.length - 1];\n const invocationId = lastMsg?.invocationId;\n const isLikeVal = group.isLike ?? 0;\n\n const fullText = group.msgs\n .filter((m) => !m.functionCall && !m.functionResponse)\n .map((m) => m.text || \"\")\n .join(\"\");\n\n return (\n <Flex\n gap={16}\n align=\"center\"\n style={{ padding: \"4px 0\", color: \"#81858c\" }}\n >\n {isLastBotMsg && (\n <Tooltip title=\"重新生成\">\n <ReloadOutlined style={{ cursor: \"pointer\" }} onClick={reChat} />\n </Tooltip>\n )}\n <Tooltip title=\"复制内容\">\n <CopyOutlined\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n copy(fullText);\n message.success(\"复制成功\");\n }}\n />\n </Tooltip>\n {showFeedback && invocationId && (\n <>\n <Tooltip title=\"赞\">\n {isLikeVal === 1 ? (\n <LikeFilled\n style={{ color: primaryColor, cursor: \"pointer\" }}\n />\n ) : (\n <LikeOutlined\n style={{ cursor: \"pointer\" }}\n onClick={async () => {\n if (isLikeVal !== 0) {\n message.warning(\"已收到您的反馈,无需重复提交\");\n return;\n }\n const ok = await likeMessage(invocationId, 1);\n if (ok) message.success(\"感谢您的反馈\");\n else message.error(\"反馈失败,请稍后再试\");\n }}\n />\n )}\n </Tooltip>\n <DislikeFeedback\n msg={group}\n activeColor={primaryColor}\n onSubmit={async (formData) => {\n const ok = await likeMessage(invocationId, -1, formData);\n if (ok) message.success(\"已收到您的反馈,我们会努力做得更好\");\n else message.error(\"反馈失败,请稍后再试\");\n return ok;\n }}\n />\n </>\n )}\n </Flex>\n );\n },\n [reChat, likeMessage, showFeedback, primaryColor],\n );\n\n return (\n <XAdkChatbot\n messages={messages}\n loading={loading}\n prologue={prologue}\n suggestions={suggestions}\n onSuggest={suggestChat}\n onConfirm={confirmFnCall}\n // 操作栏:使用外部传入的 actions,否则用内置默认 actions\n actions={actions ?? defaultActions}\n // 启用分组和解析\n enableGrouping={true}\n enableProcessParsing={true}\n initialized={initialized}\n showFnCallDetail={showFnCallDetail}\n // 文件点击回调\n onFileClick={onFileClick}\n // 样式\n className={className}\n style={style}\n // 自定义工具调用渲染\n renderFunctionCall={renderFunctionCall}\n strategies={{ ...strategies, ...strategiesProp }}\n />\n );\n};\n\nexport default Messages;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type { IMessage, FileItem, UploadRequestFn } from "../../../types";
|
|
2
|
+
import type { IMessage, FileItem, UploadRequestFn, ChatStrategies } from "../../../types";
|
|
3
3
|
import type { ChatConfig } from "../../../services/api";
|
|
4
4
|
/**
|
|
5
5
|
* 聊天状态 Context
|
|
@@ -32,6 +32,8 @@ export interface ChatStateContextType {
|
|
|
32
32
|
onConfirm?: () => void;
|
|
33
33
|
/** 自定义上传函数 */
|
|
34
34
|
uploadRequest?: UploadRequestFn;
|
|
35
|
+
/** 当前 Provider 生效的聊天策略 */
|
|
36
|
+
strategies: ChatStrategies;
|
|
35
37
|
}
|
|
36
38
|
export declare const ChatStateContext: import("react").Context<ChatStateContextType | null>;
|
|
37
39
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContext","useContext","ChatStateContext","useChatState","context","Error"],"sources":["../../../../../src/components/XAdkProvider/context/ChatStateContext.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { IMessage, FileItem, UploadRequestFn } from \"@/types\";\nimport type { ChatConfig } from \"@/services/api\";\n\n/**\n * 聊天状态 Context\n * 只包含状态数据,不包含操作方法\n * 这样可以避免不必要的 rerender\n */\nexport interface ChatStateContextType {\n /** 请求地址 */\n url: string;\n /** 会话令牌 */\n token: string;\n /** 消息列表 */\n messages: IMessage[];\n /** 加载状态 */\n loading: boolean;\n /** 当前会话 ID */\n currentSessionId: string;\n /** 开场白 */\n prologue: string;\n /** 建议问题列表 */\n suggestions: string[];\n /** 应用配置信息 */\n appInfo: ChatConfig | null;\n /** 是否已初始化 */\n initialized: boolean;\n /** 是否展示点赞/点踩 */\n showFeedback: boolean;\n /** 点击附件回调 */\n onFileClick?: (file: FileItem) => void;\n // 确认工具执行回调 */\n onConfirm?: () => void;\n /** 自定义上传函数 */\n uploadRequest?: UploadRequestFn;\n}\n\nexport const ChatStateContext = createContext<ChatStateContextType | null>(\n null,\n);\n\n/**\n * 使用聊天状态 Hook\n * @returns ChatStateContextType\n * @throws Error 如果在 XAdkProvider 外部使用\n */\nexport const useChatState = () => {\n const context = useContext(ChatStateContext);\n if (!context) {\n throw new Error(\"useChatState must be used within XAdkProvider\");\n }\n return context;\n};\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAIjD;AACA;AACA;AACA;AACA;;
|
|
1
|
+
{"version":3,"names":["createContext","useContext","ChatStateContext","useChatState","context","Error"],"sources":["../../../../../src/components/XAdkProvider/context/ChatStateContext.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { IMessage, FileItem, UploadRequestFn, ChatStrategies } from \"@/types\";\nimport type { ChatConfig } from \"@/services/api\";\n\n/**\n * 聊天状态 Context\n * 只包含状态数据,不包含操作方法\n * 这样可以避免不必要的 rerender\n */\nexport interface ChatStateContextType {\n /** 请求地址 */\n url: string;\n /** 会话令牌 */\n token: string;\n /** 消息列表 */\n messages: IMessage[];\n /** 加载状态 */\n loading: boolean;\n /** 当前会话 ID */\n currentSessionId: string;\n /** 开场白 */\n prologue: string;\n /** 建议问题列表 */\n suggestions: string[];\n /** 应用配置信息 */\n appInfo: ChatConfig | null;\n /** 是否已初始化 */\n initialized: boolean;\n /** 是否展示点赞/点踩 */\n showFeedback: boolean;\n /** 点击附件回调 */\n onFileClick?: (file: FileItem) => void;\n // 确认工具执行回调 */\n onConfirm?: () => void;\n /** 自定义上传函数 */\n uploadRequest?: UploadRequestFn;\n /** 当前 Provider 生效的聊天策略 */\n strategies: ChatStrategies;\n}\n\nexport const ChatStateContext = createContext<ChatStateContextType | null>(\n null,\n);\n\n/**\n * 使用聊天状态 Hook\n * @returns ChatStateContextType\n * @throws Error 如果在 XAdkProvider 外部使用\n */\nexport const useChatState = () => {\n const context = useContext(ChatStateContext);\n if (!context) {\n throw new Error(\"useChatState must be used within XAdkProvider\");\n }\n return context;\n};\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAIjD;AACA;AACA;AACA;AACA;;AAgCA,OAAO,IAAMC,gBAAgB,gBAAGF,aAAa,CAC3C,IACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMG,YAAY,GAAG,SAAfA,YAAYA,CAAA,EAAS;EAChC,IAAMC,OAAO,GAAGH,UAAU,CAACC,gBAAgB,CAAC;EAC5C,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,+CAA+C,CAAC;EAClE;EACA,OAAOD,OAAO;AAChB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
2
2
|
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
3
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
3
4
|
import React, { forwardRef, useImperativeHandle, useMemo } from "react";
|
|
4
5
|
import { ConfigProvider } from "antd";
|
|
5
6
|
import { XProvider } from "@ant-design/x";
|
|
@@ -8,6 +9,7 @@ import { ChatActionContext } from "./context/ChatActionContext";
|
|
|
8
9
|
import { SessionContext } from "./context/SessionContext";
|
|
9
10
|
import useADKChat from "../../hooks/useADKChat";
|
|
10
11
|
import { primaryBlue } from "../../styles/common";
|
|
12
|
+
import { mergeChatStrategies, resolvePresetUploadRequest } from "../../presets/xGroupAdk";
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
15
|
* XAdkProvider Props (扩展版)
|
|
@@ -57,11 +59,13 @@ import { primaryBlue } from "../../styles/common";
|
|
|
57
59
|
* </XAdkProvider>
|
|
58
60
|
*/
|
|
59
61
|
var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
60
|
-
var _config$showFeedback;
|
|
62
|
+
var _config$showFeedback, _config$uploadRequest;
|
|
61
63
|
var _ref$url = _ref.url,
|
|
62
64
|
url = _ref$url === void 0 ? window.location.origin : _ref$url,
|
|
63
65
|
token = _ref.token,
|
|
64
66
|
config = _ref.config,
|
|
67
|
+
preset = _ref.preset,
|
|
68
|
+
strategies = _ref.strategies,
|
|
65
69
|
chatData = _ref.chatData,
|
|
66
70
|
_ref$providerId = _ref.providerId,
|
|
67
71
|
providerId = _ref$providerId === void 0 ? "defaultId" : _ref$providerId,
|
|
@@ -70,11 +74,16 @@ var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
70
74
|
onMessage = _ref.onMessage,
|
|
71
75
|
onStream = _ref.onStream,
|
|
72
76
|
children = _ref.children;
|
|
77
|
+
var mergedStrategies = useMemo(function () {
|
|
78
|
+
return mergeChatStrategies(preset !== null && preset !== void 0 ? preset : config === null || config === void 0 ? void 0 : config.preset, _objectSpread(_objectSpread({}, config === null || config === void 0 ? void 0 : config.strategies), strategies));
|
|
79
|
+
}, [preset, strategies, config === null || config === void 0 ? void 0 : config.preset, config === null || config === void 0 ? void 0 : config.strategies]);
|
|
80
|
+
|
|
73
81
|
// 内置 Hook 数据 (仅在没有提供 chatData 时调用)
|
|
74
82
|
var internalData = useADKChat({
|
|
75
83
|
url: url,
|
|
76
84
|
token: token || "",
|
|
77
85
|
config: config || {},
|
|
86
|
+
strategies: mergedStrategies,
|
|
78
87
|
onError: onError,
|
|
79
88
|
onSuccess: onSuccess,
|
|
80
89
|
onMessage: onMessage,
|
|
@@ -122,7 +131,14 @@ var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
122
131
|
setStateDelta = _data$setStateDelta === void 0 ? function () {} : _data$setStateDelta;
|
|
123
132
|
var showFeedback = (_config$showFeedback = config === null || config === void 0 ? void 0 : config.showFeedback) !== null && _config$showFeedback !== void 0 ? _config$showFeedback : true;
|
|
124
133
|
var onFileClick = config === null || config === void 0 ? void 0 : config.onFileClick;
|
|
125
|
-
var
|
|
134
|
+
var presetUploadRequest = useMemo(function () {
|
|
135
|
+
return resolvePresetUploadRequest(preset !== null && preset !== void 0 ? preset : config === null || config === void 0 ? void 0 : config.preset, {
|
|
136
|
+
url: url,
|
|
137
|
+
token: token,
|
|
138
|
+
appNo: config === null || config === void 0 ? void 0 : config.appNo
|
|
139
|
+
});
|
|
140
|
+
}, [preset, config === null || config === void 0 ? void 0 : config.preset, url, token, config === null || config === void 0 ? void 0 : config.appNo]);
|
|
141
|
+
var uploadRequest = (_config$uploadRequest = config === null || config === void 0 ? void 0 : config.uploadRequest) !== null && _config$uploadRequest !== void 0 ? _config$uploadRequest : presetUploadRequest;
|
|
126
142
|
|
|
127
143
|
// 暴露 API 给 ref
|
|
128
144
|
useImperativeHandle(ref, function () {
|
|
@@ -163,9 +179,10 @@ var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
163
179
|
token: token,
|
|
164
180
|
showFeedback: showFeedback,
|
|
165
181
|
onFileClick: onFileClick,
|
|
166
|
-
uploadRequest: uploadRequest
|
|
182
|
+
uploadRequest: uploadRequest,
|
|
183
|
+
strategies: mergedStrategies
|
|
167
184
|
};
|
|
168
|
-
}, [messages, loading, currentSessionId, prologue, suggestions, appInfo, initialized, showFeedback, onFileClick, uploadRequest]);
|
|
185
|
+
}, [messages, loading, currentSessionId, prologue, suggestions, appInfo, initialized, showFeedback, onFileClick, uploadRequest, mergedStrategies]);
|
|
169
186
|
|
|
170
187
|
// 动作 Context Value - 函数引用稳定,不需要每次都创建新对象
|
|
171
188
|
var chatActionValue = useMemo(function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","forwardRef","useImperativeHandle","useMemo","ConfigProvider","XProvider","ChatStateContext","ChatActionContext","SessionContext","useADKChat","primaryBlue","XAdkProviderComponent","_ref","ref","_config$showFeedback","_ref$url","url","window","location","origin","token","config","chatData","_ref$providerId","providerId","onSuccess","onError","onMessage","onStream","children","internalData","enabled","data","appInfo","startChat","stopChat","reChat","clearChat","suggestChat","confirmFnCall","deleteSession","updateSession","currentSessionId","sessionPagination","sessionList","messages","loading","prologue","suggestions","initialized","setCurrentSession","setMessages","_data$likeMessage","likeMessage","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","stop","_data$setStateDelta","setStateDelta","showFeedback","onFileClick","uploadRequest","getAppInfo","getMessages","getSessions","chatStateValue","chatActionValue","chat","sessionValue","_jsx","theme","colorPrimary","appTheme","Provider","value","style","display","height","width","position","displayName","Header","Sidebar","Messages","Sender","Chatbot","Welcome","DefaultLayout","jsx","XAdkProvider"],"sources":["../../../../src/components/XAdkProvider/index.tsx"],"sourcesContent":["import React, { forwardRef, useImperativeHandle, useMemo } from \"react\";\nimport { ConfigProvider } from \"antd\";\nimport { XProvider } from \"@ant-design/x\";\nimport { ChatStateContext } from \"./context/ChatStateContext\";\nimport { ChatActionContext } from \"./context/ChatActionContext\";\nimport { SessionContext } from \"./context/SessionContext\";\nimport useADKChat from \"@/hooks/useADKChat\";\nimport { primaryBlue } from \"@/styles/common\";\nimport type {\n XAdkProviderProps,\n XAdkProviderHandle,\n XAdkProviderConfig,\n} from \"@/types/XAdkProvider\";\nimport type { ChatHookResult } from \"@/types/ChatHook\";\n\n/**\n * XAdkProvider Props (扩展版)\n *\n * 支持两种使用方式:\n * 1. 标准协议: 提供 url/token/config,使用内置 useADKChat\n * 2. 自定义协议: 提供 chatData,使用自己的 Hook\n */\nexport interface XAdkProviderPropsExtended extends Omit<\n XAdkProviderProps,\n \"url\" | \"token\" | \"config\"\n> {\n /**\n * 选项 A: 使用标准协议 (内置 useADKChat)\n */\n url?: string;\n token: string;\n config?: XAdkProviderConfig;\n\n /**\n * 选项 B: 使用自定义 Hook 数据\n * 如果提供此参数,将忽略 url/token/config\n *\n * @example\n * // GraphQL 协议\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n *\n * @example\n * // WebSocket 协议\n * const chatData = useWebSocketChat({ url: 'ws://...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n */\n chatData?: ChatHookResult;\n\n children: React.ReactNode;\n}\n\n/**\n * XAdkProvider - AI 聊天 SDK 核心 Provider\n *\n * 采用 Compound Components 架构:\n * - 只负责数据和状态管理\n * - 不包含 UI 布局\n * - 通过 Context 向子组件提供数据\n * - 支持完全自定义的组件组合\n * - 支持协议解耦,可使用自定义 Hook\n *\n * @example\n * // 基础用法 - 标准协议\n * <XAdkProvider url=\"...\" token=\"...\" config={...}>\n * <XAdkProvider.Chatbot />\n * </XAdkProvider>\n *\n * @example\n * // 自定义协议 - GraphQL\n * function App() {\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * return (\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n * );\n * }\n *\n * @example\n * // 自定义布局\n * <XAdkProvider url=\"...\" token=\"...\">\n * <div style={{ display: 'flex' }}>\n * <XAdkProvider.Sidebar />\n * <div>\n * <XAdkProvider.Messages />\n * <XAdkProvider.Sender />\n * </div>\n * </div>\n * </XAdkProvider>\n */\nconst XAdkProviderComponent = forwardRef<\n XAdkProviderHandle,\n XAdkProviderPropsExtended\n>(\n (\n {\n url = window.location.origin,\n token,\n config,\n chatData, // 自定义 Hook 数据\n providerId = \"defaultId\",\n onSuccess,\n onError,\n onMessage,\n onStream,\n children,\n },\n ref,\n ) => {\n // 内置 Hook 数据 (仅在没有提供 chatData 时调用)\n const internalData = useADKChat({\n url,\n token: token || \"\",\n config: config || {},\n onError,\n onSuccess,\n onMessage,\n onStream,\n // 仅在提供了 url 和 token 时才初始化\n enabled: !chatData && !!url && !!token,\n });\n\n // 使用外部数据或内部数据\n const data = chatData || internalData;\n\n // 解构数据\n const {\n appInfo,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n deleteSession,\n updateSession,\n currentSessionId,\n sessionPagination,\n sessionList,\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n setCurrentSession,\n setMessages,\n likeMessage = async () => false,\n setStateDelta = () => {},\n } = data;\n\n const showFeedback = config?.showFeedback ?? true;\n const onFileClick = config?.onFileClick;\n const uploadRequest = config?.uploadRequest;\n\n // 暴露 API 给 ref\n useImperativeHandle(\n ref,\n () => ({\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSession,\n setStateDelta,\n }),\n [\n appInfo,\n messages,\n sessionList,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n setMessages,\n setCurrentSession,\n setStateDelta,\n ],\n );\n\n // 状态 Context Value - 使用 useMemo 避免不必要的 rerender\n const chatStateValue = useMemo(\n () => ({\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n onFileClick,\n uploadRequest,\n }),\n [\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n showFeedback,\n onFileClick,\n uploadRequest,\n ],\n );\n\n // 动作 Context Value - 函数引用稳定,不需要每次都创建新对象\n const chatActionValue = useMemo(\n () => ({\n chat: startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n }),\n [\n startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n ],\n );\n\n // 会话 Context Value\n const sessionValue = useMemo(\n () => ({\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n }),\n [\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n ],\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: appInfo?.appTheme || primaryBlue,\n },\n }}\n >\n <XProvider>\n <ChatStateContext.Provider value={chatStateValue}>\n <ChatActionContext.Provider value={chatActionValue}>\n <SessionContext.Provider value={sessionValue}>\n <div\n style={{\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {children}\n </div>\n </SessionContext.Provider>\n </ChatActionContext.Provider>\n </ChatStateContext.Provider>\n </XProvider>\n </ConfigProvider>\n );\n },\n);\n\nXAdkProviderComponent.displayName = \"XAdkProvider\";\n\n// 导入 Compound Components\nimport Header from \"./compound/Header\";\nimport Sidebar from \"./compound/Sidebar\";\nimport Messages from \"./compound/Messages\";\nimport Sender from \"./compound/Sender\";\nimport Chatbot from \"./compound/Chatbot\";\nimport Welcome from \"./compound/Welcome\";\nimport DefaultLayout from \"./compound/DefaultLayout\";\n\n// 导出时会挂载 Compound Components\nconst XAdkProvider = XAdkProviderComponent as typeof XAdkProviderComponent & {\n Header: typeof Header;\n Sidebar: typeof Sidebar;\n Messages: typeof Messages;\n Sender: typeof Sender;\n Chatbot: typeof Chatbot;\n Welcome: typeof Welcome;\n DefaultLayout: typeof DefaultLayout;\n};\n\n// 挂载 Compound Components\nXAdkProvider.Header = Header;\nXAdkProvider.Sidebar = Sidebar;\nXAdkProvider.Messages = Messages;\nXAdkProvider.Sender = Sender;\nXAdkProvider.Chatbot = Chatbot;\nXAdkProvider.DefaultLayout = DefaultLayout;\nXAdkProvider.Welcome = Welcome;\n\nexport default XAdkProvider;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","forwardRef","useImperativeHandle","useMemo","ConfigProvider","XProvider","ChatStateContext","ChatActionContext","SessionContext","useADKChat","primaryBlue","mergeChatStrategies","resolvePresetUploadRequest","XAdkProviderComponent","_ref","ref","_config$showFeedback","_config$uploadRequest","_ref$url","url","window","location","origin","token","config","preset","strategies","chatData","_ref$providerId","providerId","onSuccess","onError","onMessage","onStream","children","mergedStrategies","_objectSpread","internalData","enabled","data","appInfo","startChat","stopChat","reChat","clearChat","suggestChat","confirmFnCall","deleteSession","updateSession","currentSessionId","sessionPagination","sessionList","messages","loading","prologue","suggestions","initialized","setCurrentSession","setMessages","_data$likeMessage","likeMessage","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","stop","_data$setStateDelta","setStateDelta","showFeedback","onFileClick","presetUploadRequest","appNo","uploadRequest","getAppInfo","getMessages","getSessions","chatStateValue","chatActionValue","chat","sessionValue","_jsx","theme","colorPrimary","appTheme","Provider","value","style","display","height","width","position","displayName","Header","Sidebar","Messages","Sender","Chatbot","Welcome","DefaultLayout","jsx","XAdkProvider"],"sources":["../../../../src/components/XAdkProvider/index.tsx"],"sourcesContent":["import React, { forwardRef, useImperativeHandle, useMemo } from \"react\";\nimport { ConfigProvider } from \"antd\";\nimport { XProvider } from \"@ant-design/x\";\nimport { ChatStateContext } from \"./context/ChatStateContext\";\nimport { ChatActionContext } from \"./context/ChatActionContext\";\nimport { SessionContext } from \"./context/SessionContext\";\nimport useADKChat from \"@/hooks/useADKChat\";\nimport { primaryBlue } from \"@/styles/common\";\nimport type {\n XAdkProviderProps,\n XAdkProviderHandle,\n XAdkProviderConfig,\n} from \"@/types/XAdkProvider\";\nimport type { ChatHookResult } from \"@/types/ChatHook\";\nimport {\n mergeChatStrategies,\n resolvePresetUploadRequest,\n} from \"@/presets/xGroupAdk\";\n\n/**\n * XAdkProvider Props (扩展版)\n *\n * 支持两种使用方式:\n * 1. 标准协议: 提供 url/token/config,使用内置 useADKChat\n * 2. 自定义协议: 提供 chatData,使用自己的 Hook\n */\nexport interface XAdkProviderPropsExtended extends Omit<\n XAdkProviderProps,\n \"url\" | \"token\" | \"config\"\n> {\n /**\n * 选项 A: 使用标准协议 (内置 useADKChat)\n */\n url?: string;\n token: string;\n config?: XAdkProviderConfig;\n\n /**\n * 选项 B: 使用自定义 Hook 数据\n * 如果提供此参数,将忽略 url/token/config\n *\n * @example\n * // GraphQL 协议\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n *\n * @example\n * // WebSocket 协议\n * const chatData = useWebSocketChat({ url: 'ws://...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n */\n chatData?: ChatHookResult;\n\n children: React.ReactNode;\n}\n\n/**\n * XAdkProvider - AI 聊天 SDK 核心 Provider\n *\n * 采用 Compound Components 架构:\n * - 只负责数据和状态管理\n * - 不包含 UI 布局\n * - 通过 Context 向子组件提供数据\n * - 支持完全自定义的组件组合\n * - 支持协议解耦,可使用自定义 Hook\n *\n * @example\n * // 基础用法 - 标准协议\n * <XAdkProvider url=\"...\" token=\"...\" config={...}>\n * <XAdkProvider.Chatbot />\n * </XAdkProvider>\n *\n * @example\n * // 自定义协议 - GraphQL\n * function App() {\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * return (\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n * );\n * }\n *\n * @example\n * // 自定义布局\n * <XAdkProvider url=\"...\" token=\"...\">\n * <div style={{ display: 'flex' }}>\n * <XAdkProvider.Sidebar />\n * <div>\n * <XAdkProvider.Messages />\n * <XAdkProvider.Sender />\n * </div>\n * </div>\n * </XAdkProvider>\n */\nconst XAdkProviderComponent = forwardRef<\n XAdkProviderHandle,\n XAdkProviderPropsExtended\n>(\n (\n {\n url = window.location.origin,\n token,\n config,\n preset,\n strategies,\n chatData, // 自定义 Hook 数据\n providerId = \"defaultId\",\n onSuccess,\n onError,\n onMessage,\n onStream,\n children,\n },\n ref,\n ) => {\n const mergedStrategies = useMemo(\n () =>\n mergeChatStrategies(\n preset ?? config?.preset,\n {\n ...config?.strategies,\n ...strategies,\n },\n ),\n [preset, strategies, config?.preset, config?.strategies],\n );\n\n // 内置 Hook 数据 (仅在没有提供 chatData 时调用)\n const internalData = useADKChat({\n url,\n token: token || \"\",\n config: config || {},\n strategies: mergedStrategies,\n onError,\n onSuccess,\n onMessage,\n onStream,\n // 仅在提供了 url 和 token 时才初始化\n enabled: !chatData && !!url && !!token,\n });\n\n // 使用外部数据或内部数据\n const data = chatData || internalData;\n\n // 解构数据\n const {\n appInfo,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n deleteSession,\n updateSession,\n currentSessionId,\n sessionPagination,\n sessionList,\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n setCurrentSession,\n setMessages,\n likeMessage = async () => false,\n setStateDelta = () => {},\n } = data;\n\n const showFeedback = config?.showFeedback ?? true;\n const onFileClick = config?.onFileClick;\n const presetUploadRequest = useMemo(\n () =>\n resolvePresetUploadRequest(preset ?? config?.preset, {\n url,\n token,\n appNo: config?.appNo,\n }),\n [preset, config?.preset, url, token, config?.appNo],\n );\n const uploadRequest = config?.uploadRequest ?? presetUploadRequest;\n\n // 暴露 API 给 ref\n useImperativeHandle(\n ref,\n () => ({\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSession,\n setStateDelta,\n }),\n [\n appInfo,\n messages,\n sessionList,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n setMessages,\n setCurrentSession,\n setStateDelta,\n ],\n );\n\n // 状态 Context Value - 使用 useMemo 避免不必要的 rerender\n const chatStateValue = useMemo(\n () => ({\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n onFileClick,\n uploadRequest,\n strategies: mergedStrategies,\n }),\n [\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n showFeedback,\n onFileClick,\n uploadRequest,\n mergedStrategies,\n ],\n );\n\n // 动作 Context Value - 函数引用稳定,不需要每次都创建新对象\n const chatActionValue = useMemo(\n () => ({\n chat: startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n }),\n [\n startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n ],\n );\n\n // 会话 Context Value\n const sessionValue = useMemo(\n () => ({\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n }),\n [\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n ],\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: appInfo?.appTheme || primaryBlue,\n },\n }}\n >\n <XProvider>\n <ChatStateContext.Provider value={chatStateValue}>\n <ChatActionContext.Provider value={chatActionValue}>\n <SessionContext.Provider value={sessionValue}>\n <div\n style={{\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {children}\n </div>\n </SessionContext.Provider>\n </ChatActionContext.Provider>\n </ChatStateContext.Provider>\n </XProvider>\n </ConfigProvider>\n );\n },\n);\n\nXAdkProviderComponent.displayName = \"XAdkProvider\";\n\n// 导入 Compound Components\nimport Header from \"./compound/Header\";\nimport Sidebar from \"./compound/Sidebar\";\nimport Messages from \"./compound/Messages\";\nimport Sender from \"./compound/Sender\";\nimport Chatbot from \"./compound/Chatbot\";\nimport Welcome from \"./compound/Welcome\";\nimport DefaultLayout from \"./compound/DefaultLayout\";\n\n// 导出时会挂载 Compound Components\nconst XAdkProvider = XAdkProviderComponent as typeof XAdkProviderComponent & {\n Header: typeof Header;\n Sidebar: typeof Sidebar;\n Messages: typeof Messages;\n Sender: typeof Sender;\n Chatbot: typeof Chatbot;\n Welcome: typeof Welcome;\n DefaultLayout: typeof DefaultLayout;\n};\n\n// 挂载 Compound Components\nXAdkProvider.Header = Header;\nXAdkProvider.Sidebar = Sidebar;\nXAdkProvider.Messages = Messages;\nXAdkProvider.Sender = Sender;\nXAdkProvider.Chatbot = Chatbot;\nXAdkProvider.DefaultLayout = DefaultLayout;\nXAdkProvider.Welcome = Welcome;\n\nexport default XAdkProvider;\n"],"mappings":"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"}
|
|
@@ -62,6 +62,11 @@ var XAdkSender = function XAdkSender(_ref) {
|
|
|
62
62
|
var generateId = function generateId() {
|
|
63
63
|
return Date.now().toString(36) + Math.random().toString(36).substr(2);
|
|
64
64
|
};
|
|
65
|
+
var normalizeUploadResponse = function normalizeUploadResponse(response) {
|
|
66
|
+
var _response$data, _ref2;
|
|
67
|
+
var data = (_response$data = response === null || response === void 0 ? void 0 : response.data) !== null && _response$data !== void 0 ? _response$data : response;
|
|
68
|
+
return (_ref2 = Array.isArray(data) ? data[0] : data) !== null && _ref2 !== void 0 ? _ref2 : {};
|
|
69
|
+
};
|
|
65
70
|
|
|
66
71
|
// 检查文件类型
|
|
67
72
|
var checkFileType = function checkFileType(file) {
|
|
@@ -100,8 +105,8 @@ var XAdkSender = function XAdkSender(_ref) {
|
|
|
100
105
|
// 内置校验器集合
|
|
101
106
|
var builtInValidators = [
|
|
102
107
|
// 数量校验(修复批量 bug)
|
|
103
|
-
function (_file,
|
|
104
|
-
var files =
|
|
108
|
+
function (_file, _ref3) {
|
|
109
|
+
var files = _ref3.files;
|
|
105
110
|
if (files.length >= maxFiles) {
|
|
106
111
|
return "\u6700\u591A\u53EA\u80FD\u4E0A\u4F20 ".concat(maxFiles, " \u4E2A\u6587\u4EF6");
|
|
107
112
|
}
|
|
@@ -123,8 +128,8 @@ var XAdkSender = function XAdkSender(_ref) {
|
|
|
123
128
|
return null;
|
|
124
129
|
},
|
|
125
130
|
// ⭐ 新增:去重校验
|
|
126
|
-
function (file,
|
|
127
|
-
var files =
|
|
131
|
+
function (file, _ref4) {
|
|
132
|
+
var files = _ref4.files;
|
|
128
133
|
if (isDuplicateFile(file, files)) {
|
|
129
134
|
return "文件已存在";
|
|
130
135
|
}
|
|
@@ -197,7 +202,7 @@ var XAdkSender = function XAdkSender(_ref) {
|
|
|
197
202
|
|
|
198
203
|
// 上传文件
|
|
199
204
|
var uploadFiles = /*#__PURE__*/function () {
|
|
200
|
-
var
|
|
205
|
+
var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(fileList) {
|
|
201
206
|
var _iterator2, _step2, _loop;
|
|
202
207
|
return _regeneratorRuntime().wrap(function _callee$(_context2) {
|
|
203
208
|
while (1) switch (_context2.prev = _context2.next) {
|
|
@@ -232,18 +237,23 @@ var XAdkSender = function XAdkSender(_ref) {
|
|
|
232
237
|
});
|
|
233
238
|
},
|
|
234
239
|
onSuccess: function onSuccess(response) {
|
|
240
|
+
var responseData = normalizeUploadResponse(response);
|
|
235
241
|
setFiles(function (prev) {
|
|
236
242
|
return prev.map(function (f) {
|
|
237
243
|
return f.id === localFile.id ? _objectSpread(_objectSpread({}, f), {}, {
|
|
238
244
|
status: "success",
|
|
239
245
|
progress: 100,
|
|
240
|
-
response: response
|
|
246
|
+
response: response,
|
|
247
|
+
fileId: responseData.fileId || responseData.id,
|
|
248
|
+
tempUrl: responseData.tempUrl || responseData.fileUrl || responseData.url
|
|
241
249
|
}) : f;
|
|
242
250
|
});
|
|
243
251
|
});
|
|
244
252
|
onUploadSuccess === null || onUploadSuccess === void 0 || onUploadSuccess(_objectSpread(_objectSpread({}, localFile), {}, {
|
|
245
253
|
status: "success",
|
|
246
|
-
response: response
|
|
254
|
+
response: response,
|
|
255
|
+
fileId: responseData.fileId || responseData.id,
|
|
256
|
+
tempUrl: responseData.tempUrl || responseData.fileUrl || responseData.url
|
|
247
257
|
}));
|
|
248
258
|
},
|
|
249
259
|
onError: function onError(error) {
|
|
@@ -308,7 +318,7 @@ var XAdkSender = function XAdkSender(_ref) {
|
|
|
308
318
|
}, _callee, null, [[1, 10, 13, 16]]);
|
|
309
319
|
}));
|
|
310
320
|
return function uploadFiles(_x) {
|
|
311
|
-
return
|
|
321
|
+
return _ref5.apply(this, arguments);
|
|
312
322
|
};
|
|
313
323
|
}();
|
|
314
324
|
|
|
@@ -411,17 +421,16 @@ var XAdkSender = function XAdkSender(_ref) {
|
|
|
411
421
|
// 格式化文件列表为服务端格式
|
|
412
422
|
var formatFilesForServer = function formatFilesForServer(fileList) {
|
|
413
423
|
return fileList.filter(function (file) {
|
|
414
|
-
|
|
415
|
-
return file.status === "success" && ((_file$response = file.response) === null || _file$response === void 0 ? void 0 : _file$response.data);
|
|
424
|
+
return file.status === "success" && file.response;
|
|
416
425
|
}).map(function (file) {
|
|
417
|
-
var responseData = file.response
|
|
426
|
+
var responseData = normalizeUploadResponse(file.response);
|
|
418
427
|
return {
|
|
419
|
-
fileName: file.name,
|
|
420
|
-
fileId: responseData.fileId || responseData.id ||
|
|
421
|
-
tempUrl: responseData.tempUrl || responseData.url || "",
|
|
422
|
-
type: responseData.fileType || getExt(file),
|
|
423
|
-
size: responseData.fileSize,
|
|
424
|
-
mimeType: file.type,
|
|
428
|
+
fileName: responseData.fileName || file.name,
|
|
429
|
+
fileId: responseData.fileId || responseData.id || "",
|
|
430
|
+
tempUrl: responseData.tempUrl || responseData.fileUrl || responseData.url || "",
|
|
431
|
+
type: responseData.fileType || responseData.type || getExt(file),
|
|
432
|
+
size: responseData.fileSize || responseData.size || file.size,
|
|
433
|
+
mimeType: responseData.mimeType || file.type,
|
|
425
434
|
raw: _objectSpread({}, responseData)
|
|
426
435
|
};
|
|
427
436
|
});
|