UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

62 lines (51 loc) 2.18 kB
// sort-imports-ignore import { subscribeWithSelector } from 'zustand/middleware'; import { shallow } from 'zustand/shallow'; import { createWithEqualityFn } from 'zustand/traditional'; import { StateCreator } from 'zustand/vanilla'; import { createDevtools } from '../middleware/createDevtools'; import { ChatStoreState, initialState } from './initialState'; import { ChatBuiltinToolAction, chatToolSlice } from './slices/builtinTool/actions'; import { ChatPortalAction, chatPortalSlice } from './slices/portal/action'; import { ChatTranslateAction, chatTranslate } from './slices/translate/action'; import { ChatMessageAction, chatMessage } from './slices/message/action'; import { ChatPluginAction, chatPlugin } from './slices/plugin/action'; import { ShareAction, chatShare } from './slices/share/action'; import { ChatTopicAction, chatTopic } from './slices/topic/action'; import { ChatAIChatAction, chatAiChat } from './slices/aiChat/actions'; import { ChatTTSAction, chatTTS } from './slices/tts/action'; import { ChatThreadAction, chatThreadMessage } from './slices/thread/action'; export interface ChatStoreAction extends ChatMessageAction, ChatThreadAction, ChatAIChatAction, ChatTopicAction, ShareAction, ChatTranslateAction, ChatTTSAction, ChatPluginAction, ChatBuiltinToolAction, ChatPortalAction {} export type ChatStore = ChatStoreAction & ChatStoreState; // =============== 聚合 createStoreFn ============ // const createStore: StateCreator<ChatStore, [['zustand/devtools', never]]> = (...params) => ({ ...initialState, ...chatMessage(...params), ...chatThreadMessage(...params), ...chatAiChat(...params), ...chatTopic(...params), ...chatShare(...params), ...chatTranslate(...params), ...chatTTS(...params), ...chatToolSlice(...params), ...chatPlugin(...params), ...chatPortalSlice(...params), // cloud }); // =============== 实装 useStore ============ // const devtools = createDevtools('chat'); export const useChatStore = createWithEqualityFn<ChatStore>()( subscribeWithSelector(devtools(createStore)), shallow, ); export const getChatStoreState = () => useChatStore.getState();