@lobehub/ui
Version:
Lobe UI is an open-source UI component library for building AIGC web apps
1 lines • 3.46 kB
Source Map (JSON)
{"version":3,"file":"messageReducer.mjs","names":[],"sources":["../../../src/chat/EditableMessageList/messageReducer.ts"],"sourcesContent":["import { produce } from 'immer';\n\nimport type { ChatMessageError, LLMMessage, LLMRoleType } from '@/chat/types';\n\nexport type MessageDispatch =\n | { message: LLMMessage; type: 'addMessage' }\n | { index: number; message: LLMMessage; type: 'insertMessage' }\n | { index: number; type: 'deleteMessage' }\n | { type: 'resetMessages' }\n | { index: number; message: string; type: 'updateMessage' }\n | { index: number; role: LLMRoleType; type: 'updateMessageRole' }\n //\n | { message: string; type: 'addUserMessage' }\n | { responseStream: string[]; type: 'updateLatestBotMessage' }\n | { index: number; message: string; type: 'updateMessageChoice' }\n | {\n error: ChatMessageError | undefined;\n index: number;\n type: 'setErrorMessage';\n };\n\nexport const messagesReducer = (state: LLMMessage[], payload: MessageDispatch): LLMMessage[] => {\n switch (payload.type) {\n case 'addMessage': {\n return [...state, payload.message];\n }\n\n case 'insertMessage': {\n return produce(state, (draftState) => {\n draftState.splice(payload.index, 0, payload.message);\n });\n }\n\n case 'deleteMessage': {\n return state.filter((_, index) => index !== payload.index);\n }\n case 'resetMessages': {\n return [];\n }\n\n case 'updateMessage': {\n return produce(state, (draftState) => {\n const { index, message } = payload;\n\n draftState[index].content = message;\n });\n }\n case 'updateMessageRole': {\n return produce(state, (draftState) => {\n const { index, role } = payload;\n\n draftState[index].role = role;\n });\n }\n\n case 'addUserMessage': {\n return produce(state, (draftState) => {\n draftState.push({ content: payload.message, role: 'user' });\n });\n }\n\n case 'updateLatestBotMessage': {\n return produce(state, () => {\n const { responseStream } = payload;\n const newMessage = { content: responseStream.join(''), role: 'assistant' };\n\n return [...state.slice(0, -1), newMessage];\n });\n }\n\n case 'setErrorMessage': {\n return produce(state, (draftState) => {\n const { index, error } = payload;\n\n // @ts-ignore\n draftState[index].error = error;\n });\n }\n\n default: {\n throw new Error('暂未实现的 type,请检查 reducer');\n }\n }\n};\n"],"mappings":";;AAqBA,MAAa,mBAAmB,OAAqB,YAA2C;CAC9F,QAAQ,QAAQ,MAAhB;EACE,KAAK,cACH,OAAO,CAAC,GAAG,OAAO,QAAQ,OAAO;EAGnC,KAAK,iBACH,OAAO,QAAQ,QAAQ,eAAe;GACpC,WAAW,OAAO,QAAQ,OAAO,GAAG,QAAQ,OAAO;EACrD,CAAC;EAGH,KAAK,iBACH,OAAO,MAAM,QAAQ,GAAG,UAAU,UAAU,QAAQ,KAAK;EAE3D,KAAK,iBACH,OAAO,CAAC;EAGV,KAAK,iBACH,OAAO,QAAQ,QAAQ,eAAe;GACpC,MAAM,EAAE,OAAO,YAAY;GAE3B,WAAW,MAAM,CAAC,UAAU;EAC9B,CAAC;EAEH,KAAK,qBACH,OAAO,QAAQ,QAAQ,eAAe;GACpC,MAAM,EAAE,OAAO,SAAS;GAExB,WAAW,MAAM,CAAC,OAAO;EAC3B,CAAC;EAGH,KAAK,kBACH,OAAO,QAAQ,QAAQ,eAAe;GACpC,WAAW,KAAK;IAAE,SAAS,QAAQ;IAAS,MAAM;GAAO,CAAC;EAC5D,CAAC;EAGH,KAAK,0BACH,OAAO,QAAQ,aAAa;GAC1B,MAAM,EAAE,mBAAmB;GAC3B,MAAM,aAAa;IAAE,SAAS,eAAe,KAAK,EAAE;IAAG,MAAM;GAAY;GAEzE,OAAO,CAAC,GAAG,MAAM,MAAM,GAAG,EAAE,GAAG,UAAU;EAC3C,CAAC;EAGH,KAAK,mBACH,OAAO,QAAQ,QAAQ,eAAe;GACpC,MAAM,EAAE,OAAO,UAAU;GAGzB,WAAW,MAAM,CAAC,QAAQ;EAC5B,CAAC;EAGH,SACE,MAAM,IAAI,MAAM,wBAAwB;CAE5C;AACF"}