@agentscope-ai/chat 1.1.20 → 1.1.22
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/bin/client.js +1 -1
- package/components/AGUI/components/HelpModal/icons.tsx +68 -0
- package/components/AGUI/components/HelpModal/index.tsx +1 -0
- package/components/AGUI/components/HelpModal/modal.tsx +101 -0
- package/components/AGUI/components/chat/Button.tsx +18 -0
- package/components/AGUI/components/chat/Chat.tsx +780 -0
- package/components/AGUI/components/chat/ChatContext.tsx +248 -0
- package/components/AGUI/components/chat/CodeBlock.tsx +406 -0
- package/components/AGUI/components/chat/Header.tsx +22 -0
- package/components/AGUI/components/chat/Icons.tsx +237 -0
- package/components/AGUI/components/chat/ImageUploadQueue.tsx +77 -0
- package/components/AGUI/components/chat/Input.tsx +24 -0
- package/components/AGUI/components/chat/Markdown.tsx +134 -0
- package/components/AGUI/components/chat/Messages.tsx +259 -0
- package/components/AGUI/components/chat/Modal.tsx +133 -0
- package/components/AGUI/components/chat/Popup.tsx +57 -0
- package/components/AGUI/components/chat/PoweredByTag.tsx +29 -0
- package/components/AGUI/components/chat/Sidebar.tsx +74 -0
- package/components/AGUI/components/chat/Suggestion.tsx +132 -0
- package/components/AGUI/components/chat/Suggestions.tsx +20 -0
- package/components/AGUI/components/chat/Textarea.tsx +61 -0
- package/components/AGUI/components/chat/Window.tsx +152 -0
- package/components/AGUI/components/chat/index.tsx +11 -0
- package/components/AGUI/components/chat/messages/AssistantMessage.tsx +69 -0
- package/components/AGUI/components/chat/messages/RenderActionExecutionMessage.tsx +129 -0
- package/components/AGUI/components/chat/messages/RenderAgentStateMessage.tsx +116 -0
- package/components/AGUI/components/chat/messages/RenderImageMessage.tsx +64 -0
- package/components/AGUI/components/chat/messages/RenderResultMessage.tsx +26 -0
- package/components/AGUI/components/chat/messages/RenderTextMessage.tsx +51 -0
- package/components/AGUI/components/chat/messages/UserMessage.tsx +10 -0
- package/components/AGUI/components/chat/props.ts +186 -0
- package/components/AGUI/components/index.ts +1 -0
- package/components/AGUI/context/index.ts +1 -0
- package/components/AGUI/hooks/index.ts +1 -0
- package/components/AGUI/hooks/use-copilot-chat-suggestions.tsx +122 -0
- package/components/AGUI/hooks/use-copy-to-clipboard.tsx +29 -0
- package/components/AGUI/hooks/use-dark-mode.ts +10 -0
- package/components/AGUI/hooks/use-push-to-talk.tsx +166 -0
- package/components/AGUI/index.tsx +4 -0
- package/components/AGUI/lib/utils.test.ts +7 -0
- package/components/AGUI/lib/utils.ts +27 -0
- package/components/AGUI/styles.css +0 -0
- package/components/AGUI/types/css.ts +0 -0
- package/components/AGUI/types/index.ts +1 -0
- package/components/AGUI/types/suggestions.ts +6 -0
- package/components/Accordion/Accordion.tsx +203 -0
- package/components/Accordion/BodyContent.tsx +28 -0
- package/components/Accordion/DeepThinking.tsx +91 -0
- package/components/Accordion/SoftLightTitle.tsx +13 -0
- package/components/Accordion/demo/search.tsx +39 -0
- package/components/Accordion/demo/steps.tsx +135 -0
- package/components/Accordion/demo/thinking.tsx +62 -0
- package/components/Accordion/index.en-US.md +34 -0
- package/components/Accordion/index.tsx +3 -0
- package/components/Accordion/index.zh-CN.md +34 -0
- package/components/Accordion/style.ts +208 -0
- package/components/AgentScopeRuntimeWebUI/demo/index.tsx +4 -0
- package/components/AgentScopeRuntimeWebUI/index.tsx +3 -0
- package/components/AgentScopeRuntimeWebUI/lib/AgentScopeRuntime/Request/Builder.tsx +82 -0
- package/components/AgentScopeRuntimeWebUI/lib/AgentScopeRuntime/Request/Card.tsx +52 -0
- package/components/AgentScopeRuntimeWebUI/lib/AgentScopeRuntime/Response/Actions.tsx +39 -0
- package/components/AgentScopeRuntimeWebUI/lib/AgentScopeRuntime/Response/Builder.tsx +205 -0
- package/components/AgentScopeRuntimeWebUI/lib/AgentScopeRuntime/Response/Card.tsx +44 -0
- package/components/AgentScopeRuntimeWebUI/lib/AgentScopeRuntime/Response/Error.tsx +7 -0
- package/components/AgentScopeRuntimeWebUI/lib/AgentScopeRuntime/Response/Message.tsx +23 -0
- package/components/AgentScopeRuntimeWebUI/lib/AgentScopeRuntime/Response/Reasoning.tsx +16 -0
- package/components/AgentScopeRuntimeWebUI/lib/AgentScopeRuntime/Response/Tool.tsx +19 -0
- package/components/AgentScopeRuntimeWebUI/lib/AgentScopeRuntime/index.tsx +0 -0
- package/components/AgentScopeRuntimeWebUI/lib/AgentScopeRuntime/types.tsx +100 -0
- package/components/AgentScopeRuntimeWebUI/lib/Chat/Input/index.tsx +77 -0
- package/components/AgentScopeRuntimeWebUI/lib/Chat/Input/useAttachments.tsx +53 -0
- package/components/AgentScopeRuntimeWebUI/lib/Chat/MessageList/index.tsx +30 -0
- package/components/AgentScopeRuntimeWebUI/lib/Chat/Welcome/index.tsx +66 -0
- package/components/AgentScopeRuntimeWebUI/lib/Chat/Welcome/styles.ts +51 -0
- package/components/AgentScopeRuntimeWebUI/lib/Chat/hooks/index.tsx +5 -0
- package/components/AgentScopeRuntimeWebUI/lib/Chat/hooks/useChatController.tsx +130 -0
- package/components/AgentScopeRuntimeWebUI/lib/Chat/hooks/useChatMessageHandler.tsx +87 -0
- package/components/AgentScopeRuntimeWebUI/lib/Chat/hooks/useChatRequest.tsx +114 -0
- package/components/AgentScopeRuntimeWebUI/lib/Chat/hooks/useChatSessionHandler.tsx +50 -0
- package/components/AgentScopeRuntimeWebUI/lib/Chat/index.tsx +18 -0
- package/components/AgentScopeRuntimeWebUI/lib/Chat/styles.tsx +59 -0
- package/components/AgentScopeRuntimeWebUI/lib/ChatAnywhere/ComposedProvider.tsx +27 -0
- package/components/AgentScopeRuntimeWebUI/lib/ChatAnywhere/index.tsx +29 -0
- package/components/AgentScopeRuntimeWebUI/lib/Context/ChatAnywhereControl.tsx +0 -0
- package/components/AgentScopeRuntimeWebUI/lib/Context/ChatAnywhereInputContext.tsx +27 -0
- package/components/AgentScopeRuntimeWebUI/lib/Context/ChatAnywhereLayoutContext.tsx +27 -0
- package/components/AgentScopeRuntimeWebUI/lib/Context/ChatAnywhereMessagesContext.tsx +82 -0
- package/components/AgentScopeRuntimeWebUI/lib/Context/ChatAnywhereOptionsContext.tsx +76 -0
- package/components/AgentScopeRuntimeWebUI/lib/Context/ChatAnywhereSessionsContext.tsx +111 -0
- package/components/AgentScopeRuntimeWebUI/lib/Context/useChatAnywhereEventEmitter.tsx +30 -0
- package/components/AgentScopeRuntimeWebUI/lib/Header/index.tsx +45 -0
- package/components/AgentScopeRuntimeWebUI/lib/Header/styles.ts +23 -0
- package/components/AgentScopeRuntimeWebUI/lib/Layout/index.tsx +45 -0
- package/components/AgentScopeRuntimeWebUI/lib/Layout/styles.tsx +104 -0
- package/components/AgentScopeRuntimeWebUI/lib/Sessions/index.tsx +114 -0
- package/components/AgentScopeRuntimeWebUI/lib/Sessions/styles.tsx +0 -0
- package/components/AgentScopeRuntimeWebUI/lib/demo/OptionsPanel/FormItem.tsx +37 -0
- package/components/AgentScopeRuntimeWebUI/lib/demo/OptionsPanel/OptionsEditor.tsx +163 -0
- package/components/AgentScopeRuntimeWebUI/lib/demo/OptionsPanel/defaultConfig.ts +43 -0
- package/components/AgentScopeRuntimeWebUI/lib/demo/OptionsPanel/index.tsx +27 -0
- package/components/AgentScopeRuntimeWebUI/lib/demo/index.tsx +57 -0
- package/components/AgentScopeRuntimeWebUI/lib/demo/sessionApi/index.ts +51 -0
- package/components/AgentScopeRuntimeWebUI/lib/types/IChatAnywhere.ts +358 -0
- package/components/AgentScopeRuntimeWebUI/lib/types/IMessages.tsx +52 -0
- package/components/AgentScopeRuntimeWebUI/lib/types/ISessions.tsx +29 -0
- package/components/AgentScopeRuntimeWebUI/lib/types/index.tsx +3 -0
- package/components/AgentScopeRuntimeWebUI/starter/OptionsPanel/FormItem.tsx +37 -0
- package/components/AgentScopeRuntimeWebUI/starter/OptionsPanel/OptionsEditor.tsx +163 -0
- package/components/AgentScopeRuntimeWebUI/starter/OptionsPanel/defaultConfig.ts +43 -0
- package/components/AgentScopeRuntimeWebUI/starter/OptionsPanel/index.tsx +27 -0
- package/components/AgentScopeRuntimeWebUI/starter/index.tsx +57 -0
- package/components/AgentScopeRuntimeWebUI/starter/sessionApi/index.ts +51 -0
- package/components/Attachments/DropArea.tsx +97 -0
- package/components/Attachments/FileList/AudioIcon.tsx +20 -0
- package/components/Attachments/FileList/FileListCard.tsx +270 -0
- package/components/Attachments/FileList/Progress.tsx +30 -0
- package/components/Attachments/FileList/VideoIcon.tsx +20 -0
- package/components/Attachments/FileList/index.tsx +201 -0
- package/components/Attachments/PlaceholderUploader.tsx +124 -0
- package/components/Attachments/SilentUploader.tsx +39 -0
- package/components/Attachments/context.tsx +11 -0
- package/components/Attachments/demo/basic.tsx +71 -0
- package/components/Attachments/index.en-US.md.bk +10 -0
- package/components/Attachments/index.tsx +274 -0
- package/components/Attachments/index.zh-CN.md.bk +10 -0
- package/components/Attachments/style/fileCard.ts +163 -0
- package/components/Attachments/style/index.ts +232 -0
- package/components/Attachments/util.ts +56 -0
- package/components/Bubble/Avatar.tsx +39 -0
- package/components/Bubble/Bubble.tsx +131 -0
- package/components/Bubble/BubbleList.tsx +105 -0
- package/components/Bubble/Cards.tsx +61 -0
- package/components/Bubble/Footer.tsx +55 -0
- package/components/Bubble/Interrupted.tsx +82 -0
- package/components/Bubble/ScrollToBottom.tsx +42 -0
- package/components/Bubble/Spin.tsx +13 -0
- package/components/Bubble/demo/assistantWithCode.tsx +60 -0
- package/components/Bubble/demo/assistantWithErrorStatus.tsx +102 -0
- package/components/Bubble/demo/assistantWithImage.tsx +46 -0
- package/components/Bubble/demo/assistantWithProcess.tsx +103 -0
- package/components/Bubble/demo/assistantWithSearch.tsx +69 -0
- package/components/Bubble/demo/assistantWithThinking.tsx +54 -0
- package/components/Bubble/demo/basic.tsx +55 -0
- package/components/Bubble/demo/userWithFile.tsx +27 -0
- package/components/Bubble/demo/userWithImage.tsx +26 -0
- package/components/Bubble/hooks/useDisplayData.ts +0 -0
- package/components/Bubble/hooks/useListData.ts +0 -0
- package/components/Bubble/index.en-US.md +33 -0
- package/components/Bubble/index.tsx +21 -0
- package/components/Bubble/index.zh-CN.md +33 -0
- package/components/Bubble/interface.ts +71 -0
- package/components/Bubble/loading.tsx +15 -0
- package/components/Bubble/style/avatar.ts +43 -0
- package/components/Bubble/style/footer.ts +45 -0
- package/components/Bubble/style/index.ts +192 -0
- package/components/Bubble/style/list.ts +51 -0
- package/components/ChatAnywhere/Chat/Ref.tsx +20 -0
- package/components/ChatAnywhere/Chat/index.tsx +56 -0
- package/components/ChatAnywhere/Chat/style.ts +59 -0
- package/components/ChatAnywhere/Header/index.tsx +37 -0
- package/components/ChatAnywhere/Header/style.ts +27 -0
- package/components/ChatAnywhere/Input/index.tsx +158 -0
- package/components/ChatAnywhere/Input/style.ts +14 -0
- package/components/ChatAnywhere/Layout/index.tsx +70 -0
- package/components/ChatAnywhere/Layout/style.ts +51 -0
- package/components/ChatAnywhere/SessionList/index.tsx +122 -0
- package/components/ChatAnywhere/SessionList/style.ts +53 -0
- package/components/ChatAnywhere/hooks/ChatAnywhereProvider.tsx +219 -0
- package/components/ChatAnywhere/hooks/types.ts +333 -0
- package/components/ChatAnywhere/hooks/useInput.tsx +22 -0
- package/components/ChatAnywhere/hooks/useMessages.tsx +63 -0
- package/components/ChatAnywhere/hooks/useSessionList.tsx +123 -0
- package/components/ChatAnywhere/index.tsx +49 -0
- package/components/Conversations/GroupTitle.tsx +28 -0
- package/components/Conversations/Item.tsx +189 -0
- package/components/Conversations/demo/basic.tsx +107 -0
- package/components/Conversations/demo/timeline.tsx +111 -0
- package/components/Conversations/demo/timestamp.tsx +110 -0
- package/components/Conversations/hooks/useGroupable.ts +81 -0
- package/components/Conversations/index.en-US.md +32 -0
- package/components/Conversations/index.tsx +176 -0
- package/components/Conversations/index.zh-CN.md +31 -0
- package/components/Conversations/interface.ts +69 -0
- package/components/Conversations/style.ts +153 -0
- package/components/DefaultCards/DeepThinking/index.tsx +33 -0
- package/components/DefaultCards/Files/index.tsx +69 -0
- package/components/DefaultCards/Footer/index.tsx +16 -0
- package/components/DefaultCards/Images/index.tsx +53 -0
- package/components/DefaultCards/Interrupted/index.tsx +13 -0
- package/components/DefaultCards/Text/index.tsx +13 -0
- package/components/DefaultCards/index.tsx +6 -0
- package/components/DeviceAction/actionMap.tsx +100 -0
- package/components/DeviceAction/demo/index.tsx +132 -0
- package/components/DeviceAction/index.en-US.md +19 -0
- package/components/DeviceAction/index.tsx +75 -0
- package/components/DeviceAction/index.zh-CN.md +19 -0
- package/components/Disclaimer/demo/index.tsx +4 -0
- package/components/Disclaimer/demo/withLink.tsx +4 -0
- package/components/Disclaimer/index.en-US.md +23 -0
- package/components/Disclaimer/index.tsx +42 -0
- package/components/Disclaimer/index.zh-CN.md +24 -0
- package/components/Disclaimer/style.ts +17 -0
- package/components/ImageGenerator/demo/basic.tsx +23 -0
- package/components/ImageGenerator/demo/custom.tsx +56 -0
- package/components/ImageGenerator/demo/size.tsx +15 -0
- package/components/ImageGenerator/index.en-US.md +23 -0
- package/components/ImageGenerator/index.tsx +124 -0
- package/components/ImageGenerator/index.zh-CN.md +23 -0
- package/components/ImageGenerator/style.ts +99 -0
- package/components/Markdown/Markdown/AnimationNode.tsx +89 -0
- package/components/Markdown/Markdown/Markdown.tsx +61 -0
- package/components/Markdown/Markdown/core/Parser.ts +52 -0
- package/components/Markdown/Markdown/core/Renderer.ts +121 -0
- package/components/Markdown/Markdown/core/index.ts +4 -0
- package/components/Markdown/Markdown/defaultComponents/CodeBlock.tsx +113 -0
- package/components/Markdown/Markdown/defaultComponents/DisabledImage.tsx +3 -0
- package/components/Markdown/Markdown/defaultComponents/Media.tsx +71 -0
- package/components/Markdown/Markdown/hooks/index.ts +4 -0
- package/components/Markdown/Markdown/hooks/useAnimation.tsx +27 -0
- package/components/Markdown/Markdown/hooks/useCitationsData.tsx +36 -0
- package/components/Markdown/Markdown/hooks/useStreaming.ts +503 -0
- package/components/Markdown/Markdown/hooks/useTyping.ts +22 -0
- package/components/Markdown/Markdown/index.tsx +198 -0
- package/components/Markdown/Markdown/interface.ts +217 -0
- package/components/Markdown/Markdown/style.ts +152 -0
- package/components/Markdown/demo/basic.tsx +107 -0
- package/components/Markdown/demo/citations.tsx +47 -0
- package/components/Markdown/demo/cursor.tsx +9 -0
- package/components/Markdown/demo/latex.tsx +77 -0
- package/components/Markdown/demo/typing.tsx +82 -0
- package/components/Markdown/index.en-US.md +27 -0
- package/components/Markdown/index.ts +1 -0
- package/components/Markdown/index.zh-CN.md +28 -0
- package/components/Markdown/plugins/citations/CitationComponent.tsx +72 -0
- package/components/Markdown/plugins/citations/index.tsx +37 -0
- package/components/Markdown/plugins/cursor/Dot.tsx +106 -0
- package/components/Markdown/plugins/cursor/Underline.tsx +38 -0
- package/components/Markdown/plugins/cursor/index.tsx +59 -0
- package/components/Markdown/plugins/latex/index.ts +109 -0
- package/components/Markdown/plugins/type.ts +71 -0
- package/components/Mermaid/demo/basic.tsx +12 -0
- package/components/Mermaid/demo/class.tsx +31 -0
- package/components/Mermaid/demo/flowchart.tsx +13 -0
- package/components/Mermaid/demo/sequence.tsx +18 -0
- package/components/Mermaid/demo/state.tsx +16 -0
- package/components/Mermaid/demo/timeline.tsx +15 -0
- package/components/Mermaid/index.en-US.md +27 -0
- package/components/Mermaid/index.tsx +118 -0
- package/components/Mermaid/index.zh-CN.md +27 -0
- package/components/OperateCard/OperateCard.tsx +93 -0
- package/components/OperateCard/demo/index.tsx +35 -0
- package/components/OperateCard/demo/rag.tsx +19 -0
- package/components/OperateCard/demo/thinking.tsx +17 -0
- package/components/OperateCard/demo/todo.tsx +28 -0
- package/components/OperateCard/demo/toolCall.tsx +14 -0
- package/components/OperateCard/demo/webSearch.tsx +12 -0
- package/components/OperateCard/index.en-US.md +51 -0
- package/components/OperateCard/index.tsx +1 -0
- package/components/OperateCard/index.zh-CN.md +51 -0
- package/components/OperateCard/preset/Rag.tsx +90 -0
- package/components/OperateCard/preset/Thinking.tsx +45 -0
- package/components/OperateCard/preset/TodoList.tsx +73 -0
- package/components/OperateCard/preset/ToolCall.tsx +67 -0
- package/components/OperateCard/preset/WebSearch.tsx +65 -0
- package/components/OperateCard/preset/index.tsx +5 -0
- package/components/OperateCard/style.ts +268 -0
- package/components/Provider/CustomCardsProvider.tsx +17 -0
- package/components/Provider/GlobalProvider.tsx +17 -0
- package/components/Provider/index.tsx +33 -0
- package/components/Provider/types.ts +23 -0
- package/components/ResponsesAPI/index.tsx +0 -0
- package/components/Sender/ModeSelect/index.tsx +160 -0
- package/components/Sender/ModeSelect/styles.ts +0 -0
- package/components/Sender/SenderHeader.tsx +164 -0
- package/components/Sender/StopLoading.tsx +48 -0
- package/components/Sender/components/ActionButton.tsx +106 -0
- package/components/Sender/components/ClearButton.tsx +10 -0
- package/components/Sender/components/LoadingButton.tsx +26 -0
- package/components/Sender/components/SendButton.tsx +22 -0
- package/components/Sender/components/SpeechButton/RecordingIcon.tsx +68 -0
- package/components/Sender/components/SpeechButton/index.tsx +30 -0
- package/components/Sender/demo/asr.tsx +7 -0
- package/components/Sender/demo/basic.tsx +7 -0
- package/components/Sender/demo/loading.tsx +5 -0
- package/components/Sender/demo/moreMode.tsx +45 -0
- package/components/Sender/demo/morePrefixAction.tsx +40 -0
- package/components/Sender/demo/withFile.tsx +54 -0
- package/components/Sender/demo/withImage.tsx +52 -0
- package/components/Sender/index.en-US.md +29 -0
- package/components/Sender/index.tsx +491 -0
- package/components/Sender/index.zh-CN.md +30 -0
- package/components/Sender/style/index.ts +150 -0
- package/components/Sender/useSpeech.ts +133 -0
- package/components/StatusCard/demo/index.tsx +32 -0
- package/components/StatusCard/index.en-US.md +30 -0
- package/components/StatusCard/index.tsx +162 -0
- package/components/StatusCard/index.zh-CN.md +27 -0
- package/components/StatusCard/style.ts +119 -0
- package/components/Stream/index.ts +203 -0
- package/components/Util/hooks/use-proxy-imperative-handle.ts +25 -0
- package/components/Util/sleep.ts +3 -0
- package/components/Util/type.ts +1 -0
- package/components/Util/warning.ts +118 -0
- package/components/Version/index.ts +3 -0
- package/components/Voice/Recorder.tsx +3 -0
- package/components/Voice/demo/index.tsx +0 -0
- package/components/Voice/index.en-US.md +8 -0
- package/components/Voice/index.tsx +0 -0
- package/components/Voice/index.zh-CN.md +9 -0
- package/components/Welcome/demo/EyeFollower.tsx +161 -0
- package/components/Welcome/demo/demo0.tsx +14 -0
- package/components/Welcome/demo/demo1.tsx +16 -0
- package/components/Welcome/demo/demo2.tsx +30 -0
- package/components/Welcome/demo/demo3.tsx +16 -0
- package/components/Welcome/index.en-US.md +28 -0
- package/components/Welcome/index.tsx +72 -0
- package/components/Welcome/index.zh-CN.md +28 -0
- package/components/index.ts +88 -0
- package/components/overview.en-US.md +10 -0
- package/components/overview.zh-CN.md +10 -0
- package/lib/AgentScopeRuntimeWebUI/index.d.ts +1 -0
- package/lib/AgentScopeRuntimeWebUI/index.js +1 -0
- package/lib/AgentScopeRuntimeWebUI/starter/OptionsPanel/FormItem.d.ts +9 -0
- package/lib/AgentScopeRuntimeWebUI/starter/OptionsPanel/FormItem.js +33 -0
- package/lib/AgentScopeRuntimeWebUI/starter/OptionsPanel/OptionsEditor.d.ts +7 -0
- package/lib/AgentScopeRuntimeWebUI/starter/OptionsPanel/OptionsEditor.js +188 -0
- package/lib/AgentScopeRuntimeWebUI/starter/OptionsPanel/defaultConfig.d.ts +29 -0
- package/lib/AgentScopeRuntimeWebUI/starter/OptionsPanel/defaultConfig.js +35 -0
- package/lib/AgentScopeRuntimeWebUI/starter/OptionsPanel/index.d.ts +6 -0
- package/lib/AgentScopeRuntimeWebUI/starter/OptionsPanel/index.js +49 -0
- package/lib/AgentScopeRuntimeWebUI/starter/index.d.ts +1 -0
- package/lib/AgentScopeRuntimeWebUI/starter/index.js +70 -0
- package/lib/AgentScopeRuntimeWebUI/starter/sessionApi/index.d.ts +14 -0
- package/lib/AgentScopeRuntimeWebUI/starter/sessionApi/index.js +143 -0
- package/package.json +3 -2
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { GetProp, Upload, UploadFile } from 'antd';
|
|
2
|
+
import { ScrollToBottomOptions } from 'use-stick-to-bottom';
|
|
3
|
+
import { IChatAnywhereContext } from './ChatAnywhereProvider';
|
|
4
|
+
|
|
5
|
+
export interface TSession {
|
|
6
|
+
/**
|
|
7
|
+
* @description 会话的唯一标识符,用于区分不同的聊天会话
|
|
8
|
+
* @descriptionEn Unique identifier for the session to distinguish different chat sessions
|
|
9
|
+
*/
|
|
10
|
+
key: string;
|
|
11
|
+
/**
|
|
12
|
+
* @description 会话中的消息列表,按组进行组织
|
|
13
|
+
* @descriptionEn Message list in the session, organized by groups
|
|
14
|
+
*/
|
|
15
|
+
messages: TMessage[][];
|
|
16
|
+
/**
|
|
17
|
+
* @description 会话的显示名称
|
|
18
|
+
* @descriptionEn Display name for the session
|
|
19
|
+
*/
|
|
20
|
+
label: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface TMessageCard {
|
|
24
|
+
/**
|
|
25
|
+
* @description 卡片的唯一标识符
|
|
26
|
+
* @descriptionEn Unique identifier for the card
|
|
27
|
+
*/
|
|
28
|
+
id?: string;
|
|
29
|
+
/**
|
|
30
|
+
* @description 卡片的类型代码
|
|
31
|
+
* @descriptionEn Type code for the card
|
|
32
|
+
*/
|
|
33
|
+
code: string;
|
|
34
|
+
/**
|
|
35
|
+
* @description 卡片的渲染组件
|
|
36
|
+
* @descriptionEn Rendering component for the card
|
|
37
|
+
*/
|
|
38
|
+
component?: React.FC;
|
|
39
|
+
/**
|
|
40
|
+
* @description 卡片的数据内容
|
|
41
|
+
* @descriptionEn Data content for the card
|
|
42
|
+
*/
|
|
43
|
+
data?: string | any;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface TMessage {
|
|
47
|
+
/**
|
|
48
|
+
* @description 消息的唯一标识符
|
|
49
|
+
* @descriptionEn Unique identifier for the message
|
|
50
|
+
*/
|
|
51
|
+
id: string;
|
|
52
|
+
/**
|
|
53
|
+
* @description 消息的文本内容
|
|
54
|
+
* @descriptionEn Text content of the message
|
|
55
|
+
*/
|
|
56
|
+
content?: string;
|
|
57
|
+
/**
|
|
58
|
+
* @description 消息中的卡片组件配置
|
|
59
|
+
* @descriptionEn Card component configuration in the message
|
|
60
|
+
*/
|
|
61
|
+
cards?: TMessageCard[];
|
|
62
|
+
/**
|
|
63
|
+
* @description 消息的角色类型,区分用户、助手和系统消息
|
|
64
|
+
* @descriptionEn Role type of the message to distinguish user, assistant, and system messages
|
|
65
|
+
*/
|
|
66
|
+
role: 'user' | 'assistant' | 'system';
|
|
67
|
+
/**
|
|
68
|
+
* @description 消息的处理状态,影响显示效果
|
|
69
|
+
* @descriptionEn Processing status of the message, affects display effects
|
|
70
|
+
*/
|
|
71
|
+
msgStatus?: 'finished' | 'interrupted' | 'generating' | 'error';
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface IChatAnywhereConfigUIConfig {
|
|
75
|
+
/**
|
|
76
|
+
* @description 是否启用窄屏模式,影响响应式布局
|
|
77
|
+
* @descriptionEn Whether to enable narrow screen mode, affects responsive layout
|
|
78
|
+
*/
|
|
79
|
+
narrowScreen?: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* @description 背景样式配置
|
|
82
|
+
* @descriptionEn Background style configuration
|
|
83
|
+
*/
|
|
84
|
+
background?: string;
|
|
85
|
+
/**
|
|
86
|
+
* @description 自定义头部组件
|
|
87
|
+
* @descriptionEn Custom header component
|
|
88
|
+
*/
|
|
89
|
+
header?: React.ReactElement;
|
|
90
|
+
/**
|
|
91
|
+
* @description 快速输入组件,用于提供预设的输入选项
|
|
92
|
+
* @descriptionEn Quick input component for providing preset input options
|
|
93
|
+
*/
|
|
94
|
+
quickInput?: React.ReactElement | React.ReactElement[];
|
|
95
|
+
/**
|
|
96
|
+
* @description 应用logo组件
|
|
97
|
+
* @descriptionEn Application logo component
|
|
98
|
+
*/
|
|
99
|
+
logo?: React.ReactElement;
|
|
100
|
+
/**
|
|
101
|
+
* @description 欢迎页面组件
|
|
102
|
+
* @descriptionEn Welcome page component
|
|
103
|
+
*/
|
|
104
|
+
welcome?: React.ReactElement;
|
|
105
|
+
/**
|
|
106
|
+
* @description 免责声明组件或文本
|
|
107
|
+
* @descriptionEn Disclaimer component or text
|
|
108
|
+
*/
|
|
109
|
+
disclaimer?: React.ReactElement | string;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export interface IChatAnywhereConfigOnInput {
|
|
113
|
+
/**
|
|
114
|
+
* @description 输入框前的UI组件
|
|
115
|
+
* @descriptionEn UI component before the input field
|
|
116
|
+
*/
|
|
117
|
+
beforeUI?: React.ReactElement;
|
|
118
|
+
/**
|
|
119
|
+
* @description 输入框后的UI组件
|
|
120
|
+
* @descriptionEn UI component after the input field
|
|
121
|
+
*/
|
|
122
|
+
afterUI?: React.ReactElement;
|
|
123
|
+
/**
|
|
124
|
+
* @description 更多前缀操作组件
|
|
125
|
+
* @descriptionEn More prefix action components
|
|
126
|
+
*/
|
|
127
|
+
morePrefixActions?: React.ReactElement | React.ReactElement[];
|
|
128
|
+
/**
|
|
129
|
+
* @description 是否隐藏输入框
|
|
130
|
+
* @descriptionEn Whether to hide the input field
|
|
131
|
+
*/
|
|
132
|
+
hide?: boolean;
|
|
133
|
+
/**
|
|
134
|
+
* @description 输入框头部组件
|
|
135
|
+
* @descriptionEn Input field header components
|
|
136
|
+
*/
|
|
137
|
+
header?: React.ReactElement | React.ReactElement[];
|
|
138
|
+
/**
|
|
139
|
+
* @description 提交消息时的回调函数
|
|
140
|
+
* @descriptionEn Callback function when submitting messages
|
|
141
|
+
*/
|
|
142
|
+
onSubmit(data: { query: string; fileList?: UploadFile[][] }): void;
|
|
143
|
+
/**
|
|
144
|
+
* @description 输入内容的最大长度限制
|
|
145
|
+
* @descriptionEn Maximum length limit for input content
|
|
146
|
+
*/
|
|
147
|
+
maxLength?: number;
|
|
148
|
+
/**
|
|
149
|
+
* @description 提交前的验证函数
|
|
150
|
+
* @descriptionEn Validation function before submission
|
|
151
|
+
*/
|
|
152
|
+
beforeSubmit?: () => Promise<Boolean>;
|
|
153
|
+
/**
|
|
154
|
+
* @description 是否支持缩放功能
|
|
155
|
+
* @descriptionEn Whether to support zoom functionality
|
|
156
|
+
*/
|
|
157
|
+
zoomable?: boolean;
|
|
158
|
+
/**
|
|
159
|
+
* @description 输入框的占位符文本
|
|
160
|
+
* @descriptionEn Placeholder text for the input field
|
|
161
|
+
*/
|
|
162
|
+
placeholder?: string;
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* @description 输入框是否禁用
|
|
166
|
+
* @descriptionEn Whether the input field is disabled
|
|
167
|
+
*/
|
|
168
|
+
disabled?: boolean;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export interface IChatAnywhereConfigOnUpload {
|
|
172
|
+
/**
|
|
173
|
+
* @description 上传组件的渲染类型,影响上传附件样式
|
|
174
|
+
* @descriptionEn Render type for the upload component, affects the style of the uploaded attachment
|
|
175
|
+
*/
|
|
176
|
+
renderType?: 'simple' | 'default';
|
|
177
|
+
/**
|
|
178
|
+
* @description 最大上传文件数量
|
|
179
|
+
* @descriptionEn Maximum number of files to upload
|
|
180
|
+
*/
|
|
181
|
+
maxCount?: GetProp<typeof Upload, 'maxCount'>;
|
|
182
|
+
/**
|
|
183
|
+
* @description 上传前的处理函数
|
|
184
|
+
* @descriptionEn Pre-upload processing function
|
|
185
|
+
*/
|
|
186
|
+
beforeUpload?: GetProp<typeof Upload, 'beforeUpload'>;
|
|
187
|
+
/**
|
|
188
|
+
* @description 自定义上传请求函数
|
|
189
|
+
* @descriptionEn Custom upload request function
|
|
190
|
+
*/
|
|
191
|
+
customRequest: GetProp<typeof Upload, 'customRequest'>;
|
|
192
|
+
/**
|
|
193
|
+
* @description 是否支持多文件上传
|
|
194
|
+
* @descriptionEn Whether to support multiple file uploads
|
|
195
|
+
*/
|
|
196
|
+
multiple?: boolean;
|
|
197
|
+
/**
|
|
198
|
+
* @description 接受的文件类型
|
|
199
|
+
* @descriptionEn Accepted file types
|
|
200
|
+
*/
|
|
201
|
+
accept?: string;
|
|
202
|
+
/**
|
|
203
|
+
* @description 上传按钮的图标
|
|
204
|
+
* @descriptionEn Icon for the upload button
|
|
205
|
+
*/
|
|
206
|
+
icon?: string | React.ReactElement;
|
|
207
|
+
/**
|
|
208
|
+
* @description 是否禁用上传组件
|
|
209
|
+
* @descriptionEn Whether to disable the upload component
|
|
210
|
+
*/
|
|
211
|
+
disabled?: boolean;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export interface IChatAnywhereConfig {
|
|
215
|
+
/**
|
|
216
|
+
* @description 卡片组件的配置映射,用于自定义不同类型卡片的渲染
|
|
217
|
+
* @descriptionEn Card component configuration mapping for customizing rendering of different card types
|
|
218
|
+
*/
|
|
219
|
+
cardConfig?: {
|
|
220
|
+
[key: string]: React.FC<any>;
|
|
221
|
+
};
|
|
222
|
+
/**
|
|
223
|
+
* @description UI界面的配置选项,用于自定义外观和布局
|
|
224
|
+
* @descriptionEn UI interface configuration options for customizing appearance and layout
|
|
225
|
+
*/
|
|
226
|
+
uiConfig?: IChatAnywhereConfigUIConfig;
|
|
227
|
+
/**
|
|
228
|
+
* @description 输入功能的配置选项
|
|
229
|
+
* @descriptionEn Configuration options for input functionality
|
|
230
|
+
*/
|
|
231
|
+
onInput: IChatAnywhereConfigOnInput;
|
|
232
|
+
/**
|
|
233
|
+
* @description 停止生成的回调函数
|
|
234
|
+
* @descriptionEn Callback function for stopping generation
|
|
235
|
+
*/
|
|
236
|
+
onStop?(): void;
|
|
237
|
+
/**
|
|
238
|
+
* @description 重新生成消息的回调函数
|
|
239
|
+
* @descriptionEn Callback function for regenerating messages
|
|
240
|
+
*/
|
|
241
|
+
onRegenerate?(msg: Partial<TMessage>): void;
|
|
242
|
+
/**
|
|
243
|
+
* @description 会话切换时的回调函数
|
|
244
|
+
* @descriptionEn Callback function when switching sessions
|
|
245
|
+
*/
|
|
246
|
+
onSessionKeyChange?(key: string): void;
|
|
247
|
+
/**
|
|
248
|
+
* @description 文件上传功能的配置选项
|
|
249
|
+
* @descriptionEn Configuration options for file upload functionality
|
|
250
|
+
*/
|
|
251
|
+
onUpload?: IChatAnywhereConfigOnUpload[];
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export interface IChatAnywhereRef extends IChatAnywhereContext {
|
|
255
|
+
/**
|
|
256
|
+
* @description 设置输入框内容的方法
|
|
257
|
+
* @descriptionEn Method to set input field content
|
|
258
|
+
*/
|
|
259
|
+
setInputContent: (content: string) => void;
|
|
260
|
+
/**
|
|
261
|
+
* @description 滚动到底部的方法
|
|
262
|
+
* @descriptionEn Method to scroll to bottom
|
|
263
|
+
*/
|
|
264
|
+
scrollToBottom: (options?: ScrollToBottomOptions) => void;
|
|
265
|
+
/**
|
|
266
|
+
* @description 重新加载的方法
|
|
267
|
+
* @descriptionEn Method to reload
|
|
268
|
+
*/
|
|
269
|
+
reload: () => void;
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* @description 当前会话的消息列表
|
|
273
|
+
* @descriptionEn Message list for the current session
|
|
274
|
+
*/
|
|
275
|
+
messages: TMessage[];
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* @description 更新消息的方法
|
|
279
|
+
* @descriptionEn Method to update message
|
|
280
|
+
*/
|
|
281
|
+
updateMessage(message: Partial<TMessage> & { id: string }): void;
|
|
282
|
+
updateMessage(id: string, message: Partial<TMessage> & { id: string }): void;
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* @description 获取当前消息列表的同步函数
|
|
286
|
+
* @descriptionEn Synchronous function to get current message list
|
|
287
|
+
*/
|
|
288
|
+
getMessages: () => TMessage[];
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* @description 删除消息的方法
|
|
292
|
+
* @descriptionEn Method to remove message
|
|
293
|
+
*/
|
|
294
|
+
removeMessage: (message: Partial<TMessage>) => void;
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* @description 删除所有消息的方法
|
|
298
|
+
* @descriptionEn Method to remove all messages
|
|
299
|
+
*/
|
|
300
|
+
removeAllMessages: () => void;
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* @description 是否正在加载状态,影响UI的交互性
|
|
304
|
+
* @descriptionEn Whether in loading state, affects UI interactivity
|
|
305
|
+
*/
|
|
306
|
+
loading: boolean;
|
|
307
|
+
/**
|
|
308
|
+
* @description 设置加载状态的状态更新函数
|
|
309
|
+
* @descriptionEn State update function for setting loading state
|
|
310
|
+
*/
|
|
311
|
+
setLoading: React.Dispatch<React.SetStateAction<boolean>>;
|
|
312
|
+
/**
|
|
313
|
+
* @description 获取当前加载状态的同步函数
|
|
314
|
+
* @descriptionEn Synchronous function to get current loading state
|
|
315
|
+
*/
|
|
316
|
+
getLoading: () => boolean;
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* @description 是否禁用组件,影响所有交互功能
|
|
320
|
+
* @descriptionEn Whether to disable the component, affects all interaction functionality
|
|
321
|
+
*/
|
|
322
|
+
disabled: boolean;
|
|
323
|
+
/**
|
|
324
|
+
* @description 设置禁用状态的状态更新函数
|
|
325
|
+
* @descriptionEn State update function for setting disabled state
|
|
326
|
+
*/
|
|
327
|
+
setDisabled: React.Dispatch<React.SetStateAction<boolean>>;
|
|
328
|
+
/**
|
|
329
|
+
* @description 获取当前禁用状态的同步函数
|
|
330
|
+
* @descriptionEn Synchronous function to get current disabled state
|
|
331
|
+
*/
|
|
332
|
+
getDisabled: () => boolean;
|
|
333
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useChatAnywhere } from "./ChatAnywhereProvider";
|
|
3
|
+
|
|
4
|
+
export function useInput() {
|
|
5
|
+
const { loading, disabled, setLoading, setDisabled, getLoading, getDisabled } = useChatAnywhere(v => ({
|
|
6
|
+
loading: v.loading,
|
|
7
|
+
getLoading: v.getLoading,
|
|
8
|
+
disabled: v.disabled,
|
|
9
|
+
getDisabled: v.getDisabled,
|
|
10
|
+
setLoading: v.setLoading,
|
|
11
|
+
setDisabled: v.setDisabled,
|
|
12
|
+
}));
|
|
13
|
+
|
|
14
|
+
return {
|
|
15
|
+
loading,
|
|
16
|
+
disabled,
|
|
17
|
+
setLoading,
|
|
18
|
+
setDisabled,
|
|
19
|
+
getLoading,
|
|
20
|
+
getDisabled,
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useChatAnywhere } from "./ChatAnywhereProvider";
|
|
3
|
+
import { IChatAnywhereRef, TMessage } from './types';
|
|
4
|
+
export function useMessages() {
|
|
5
|
+
const { messages, setMessages, getMessages } = useChatAnywhere(v => ({
|
|
6
|
+
messages: v.messages,
|
|
7
|
+
setMessages: v.setMessages,
|
|
8
|
+
getMessages: v.getMessages,
|
|
9
|
+
}));
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
const updateMessage = React.useCallback<IChatAnywhereRef['updateMessage']>((...args) => {
|
|
13
|
+
|
|
14
|
+
const id = args[0]?.id || args[0];
|
|
15
|
+
const message = args[1] || args[0];
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
setMessages?.((prev) => {
|
|
19
|
+
const index = prev.findIndex((item) => item.id === id);
|
|
20
|
+
if (index > -1) {
|
|
21
|
+
const nextMessage = {
|
|
22
|
+
...prev[index],
|
|
23
|
+
...message
|
|
24
|
+
};
|
|
25
|
+
return [...prev.slice(0, index), nextMessage, ...prev.slice(index + 1)];
|
|
26
|
+
} else {
|
|
27
|
+
return [...prev, message];
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
// @ts-ignore
|
|
34
|
+
}, []);
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
const removeMessage = React.useCallback((message: Partial<TMessage>) => {
|
|
38
|
+
setMessages(prev => {
|
|
39
|
+
return prev.filter(item => item.id !== message.id);
|
|
40
|
+
})
|
|
41
|
+
}, []);
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
const removeAllMessages = React.useCallback(() => {
|
|
45
|
+
setMessages([]);
|
|
46
|
+
}, []);
|
|
47
|
+
|
|
48
|
+
const getMessage = React.useCallback((id: string) => {
|
|
49
|
+
return getMessages().find(item => item.id === id);
|
|
50
|
+
}, []);
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
messages,
|
|
56
|
+
getMessage,
|
|
57
|
+
setMessages,
|
|
58
|
+
getMessages,
|
|
59
|
+
updateMessage,
|
|
60
|
+
removeMessage,
|
|
61
|
+
removeAllMessages,
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useChatAnywhere } from './ChatAnywhereProvider';
|
|
3
|
+
import { v4 as uuid } from 'uuid';
|
|
4
|
+
import { TMessage, TSession } from './types';
|
|
5
|
+
import ReactDOM from 'react-dom';
|
|
6
|
+
|
|
7
|
+
export function useSessionList() {
|
|
8
|
+
const {
|
|
9
|
+
getCurrentSessionKey,
|
|
10
|
+
sessionList,
|
|
11
|
+
setSessionList,
|
|
12
|
+
currentSessionKey,
|
|
13
|
+
setCurrentSessionKey,
|
|
14
|
+
sessionListShow,
|
|
15
|
+
setSessionListShow,
|
|
16
|
+
currentRegenerateIndex,
|
|
17
|
+
setCurrentRegenerateIndex,
|
|
18
|
+
getCurrentRegenerateIndex,
|
|
19
|
+
getSessionList,
|
|
20
|
+
} = useChatAnywhere(v => ({
|
|
21
|
+
getCurrentSessionKey: v.getCurrentSessionKey,
|
|
22
|
+
currentRegenerateIndex: v.currentRegenerateIndex,
|
|
23
|
+
setCurrentRegenerateIndex: v.setCurrentRegenerateIndex,
|
|
24
|
+
getCurrentRegenerateIndex: v.getCurrentRegenerateIndex,
|
|
25
|
+
sessionListShow: v.sessionListShow,
|
|
26
|
+
setSessionListShow: v.setSessionListShow,
|
|
27
|
+
sessionList: v.sessionList,
|
|
28
|
+
setSessionList: v.setSessionList,
|
|
29
|
+
currentSessionKey: v.currentSessionKey,
|
|
30
|
+
setCurrentSessionKey: v.setCurrentSessionKey,
|
|
31
|
+
getSessionList: v.getSessionList,
|
|
32
|
+
}));
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
const createSession = React.useCallback(() => {
|
|
36
|
+
const newKey = uuid();
|
|
37
|
+
const newSession: TSession = {
|
|
38
|
+
label: Date.now().toString(),
|
|
39
|
+
key: newKey,
|
|
40
|
+
messages: [[]],
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
ReactDOM.flushSync(() => {
|
|
44
|
+
setSessionList((sessionList) => {
|
|
45
|
+
const newSessionList = [...sessionList, newSession];
|
|
46
|
+
return newSessionList;
|
|
47
|
+
});
|
|
48
|
+
setCurrentSessionKey(newKey);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
return newKey;
|
|
52
|
+
}, []);
|
|
53
|
+
|
|
54
|
+
const deleteSession = React.useCallback((key: string) => {
|
|
55
|
+
setSessionList((sessionList) => {
|
|
56
|
+
const newSessionList = sessionList.filter((item) => item.key !== key);
|
|
57
|
+
return newSessionList;
|
|
58
|
+
});
|
|
59
|
+
}, []);
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
const updateSessionMessages = React.useCallback((messages: TMessage[]) => {
|
|
63
|
+
const currentSessionKey = getCurrentSessionKey();
|
|
64
|
+
const currentRegenerateIndex = getCurrentRegenerateIndex();
|
|
65
|
+
|
|
66
|
+
setSessionList((sessionList) => {
|
|
67
|
+
return sessionList.map((session) => {
|
|
68
|
+
if (session.key === currentSessionKey) {
|
|
69
|
+
session.messages[currentRegenerateIndex] = messages;
|
|
70
|
+
return { ...session };
|
|
71
|
+
}
|
|
72
|
+
return session;
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}, []);
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
const getMessagesBySession = React.useCallback((currentSessionKey, currentRegenerateIndex) => {
|
|
79
|
+
return getSessionList().find((session) => session.key === currentSessionKey)?.messages[currentRegenerateIndex];
|
|
80
|
+
}, []);
|
|
81
|
+
|
|
82
|
+
const getSession = React.useCallback(() => {
|
|
83
|
+
return {
|
|
84
|
+
sessionList: getSessionList(),
|
|
85
|
+
currentSessionKey: getCurrentSessionKey(),
|
|
86
|
+
currentRegenerateIndex: getCurrentRegenerateIndex(),
|
|
87
|
+
}
|
|
88
|
+
}, []);
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
const updateSession = React.useCallback((data) => {
|
|
92
|
+
const {
|
|
93
|
+
sessionList,
|
|
94
|
+
currentSessionKey,
|
|
95
|
+
currentRegenerateIndex,
|
|
96
|
+
} = data;
|
|
97
|
+
|
|
98
|
+
setSessionList(sessionList);
|
|
99
|
+
setCurrentSessionKey(currentSessionKey);
|
|
100
|
+
setCurrentRegenerateIndex(currentRegenerateIndex);
|
|
101
|
+
|
|
102
|
+
}, []);
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
return {
|
|
106
|
+
currentRegenerateIndex,
|
|
107
|
+
setCurrentRegenerateIndex,
|
|
108
|
+
getCurrentRegenerateIndex,
|
|
109
|
+
sessionList,
|
|
110
|
+
setSessionList,
|
|
111
|
+
getSessionList,
|
|
112
|
+
currentSessionKey,
|
|
113
|
+
setCurrentSessionKey,
|
|
114
|
+
sessionListShow,
|
|
115
|
+
setSessionListShow,
|
|
116
|
+
createSession,
|
|
117
|
+
deleteSession,
|
|
118
|
+
updateSessionMessages,
|
|
119
|
+
getMessagesBySession,
|
|
120
|
+
getSession,
|
|
121
|
+
updateSession,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React, { forwardRef, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import Layout from './Layout';
|
|
3
|
+
import SessionList from './SessionList';
|
|
4
|
+
import Chat from './Chat';
|
|
5
|
+
import Header from './Header';
|
|
6
|
+
import { v4 as uuid } from 'uuid';
|
|
7
|
+
import { CustomCardsProvider } from '@agentscope-ai/chat';
|
|
8
|
+
import { ChatAnywhereProvider, ChatAnywhereRef, useChatAnywhere } from './hooks/ChatAnywhereProvider';
|
|
9
|
+
import ContextRef from './Chat/Ref';
|
|
10
|
+
import { IChatAnywhereConfig } from './hooks/types';
|
|
11
|
+
import { useMessages } from './hooks/useMessages';
|
|
12
|
+
import { useInput } from './hooks/useInput';
|
|
13
|
+
import { useSessionList } from './hooks/useSessionList';
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
export type { ChatAnywhereRef }
|
|
17
|
+
export { uuid, useChatAnywhere, useMessages, useInput, useSessionList };
|
|
18
|
+
export type { TMessage, TSession } from './hooks/types';
|
|
19
|
+
|
|
20
|
+
export default forwardRef(function (chatanywhereConfig: IChatAnywhereConfig, ref) {
|
|
21
|
+
const [key, setKey] = useState(0);
|
|
22
|
+
const { cardConfig, ...rest } = chatanywhereConfig;
|
|
23
|
+
const chatRef = useRef(null);
|
|
24
|
+
const inputRef = useRef(null);
|
|
25
|
+
const contextRef = useRef(null);
|
|
26
|
+
|
|
27
|
+
React.useImperativeHandle(ref, () => {
|
|
28
|
+
return {
|
|
29
|
+
...chatRef.current,
|
|
30
|
+
...inputRef.current,
|
|
31
|
+
...contextRef.current,
|
|
32
|
+
reload: () => {
|
|
33
|
+
setKey(key => key + 1);
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
return <ChatAnywhereProvider {...rest} key={key}>
|
|
39
|
+
<CustomCardsProvider cardConfig={cardConfig}>
|
|
40
|
+
<Layout
|
|
41
|
+
top={rest.uiConfig?.header ? <Header /> : null}
|
|
42
|
+
left={rest.onSessionKeyChange ? <SessionList /> : null}
|
|
43
|
+
// @ts-ignore
|
|
44
|
+
right={<Chat ref={{ chatRef, inputRef }} />}
|
|
45
|
+
/>
|
|
46
|
+
<ContextRef ref={contextRef} />
|
|
47
|
+
</CustomCardsProvider>
|
|
48
|
+
</ChatAnywhereProvider>
|
|
49
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Typography } from 'antd';
|
|
2
|
+
import type { ConfigProviderProps, GetProp } from 'antd';
|
|
3
|
+
import classnames from 'classnames';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
|
|
6
|
+
export interface GroupTitleProps {
|
|
7
|
+
/**
|
|
8
|
+
* @description 分组标题的内容,支持文本或React元素
|
|
9
|
+
* @descriptionEn Content of the group title, supports text or React elements
|
|
10
|
+
*/
|
|
11
|
+
children?: React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const GroupTitleContext = React.createContext<{
|
|
15
|
+
prefixCls?: GetProp<ConfigProviderProps, 'prefixCls'>;
|
|
16
|
+
}>(null!);
|
|
17
|
+
|
|
18
|
+
const GroupTitle: React.FC<GroupTitleProps> = ({ children }) => {
|
|
19
|
+
const { prefixCls } = React.useContext(GroupTitleContext);
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<div className={classnames(`${prefixCls}-group-title`)}>
|
|
23
|
+
{children && <Typography.Text>{children}</Typography.Text>}
|
|
24
|
+
</div>
|
|
25
|
+
);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export default GroupTitle;
|