|
import { createSlice, PayloadAction } from "@reduxjs/toolkit"; |
|
|
|
export interface Message { |
|
role: string; |
|
content: string; |
|
timestamp: string; |
|
chatId: string; |
|
} |
|
|
|
interface ChatState { |
|
activeChatMessages: Message[]; |
|
activeChatContext: []; |
|
activeChatPrompt: string; |
|
savingPrompt: boolean; |
|
isListening: boolean; |
|
v2vChat: string; |
|
isSidebarVisible: boolean; |
|
isChangingChat: boolean; |
|
uploadingEmbeddings: boolean; |
|
} |
|
|
|
const initialState: ChatState = { |
|
activeChatMessages: [], |
|
activeChatContext: [], |
|
activeChatPrompt: "", |
|
savingPrompt: false, |
|
isListening: false, |
|
isSidebarVisible: true, |
|
isChangingChat: false, |
|
v2vChat: "", |
|
uploadingEmbeddings: false, |
|
}; |
|
|
|
export const chatSlice = createSlice({ |
|
name: "chat", |
|
initialState, |
|
reducers: { |
|
addMessage: (state, action) => { |
|
state.activeChatMessages.push(action.payload); |
|
}, |
|
setIsListening: (state, action: PayloadAction<boolean>) => { |
|
state.isListening = action.payload; |
|
}, |
|
setActiveMessages: (state, action) => { |
|
state.isChangingChat = true; |
|
state.activeChatMessages = action.payload; |
|
state.isChangingChat = false; |
|
}, |
|
setActiveContext: (state, action) => { |
|
state.activeChatContext = action.payload; |
|
}, |
|
setActiveChatPrompt: (state, action) => { |
|
state.activeChatPrompt = action.payload; |
|
}, |
|
toggleSavingPrompt: (state) => { |
|
state.savingPrompt = !state.savingPrompt; |
|
}, |
|
toggleSidebar: (state) => { |
|
state.isSidebarVisible = !state.isSidebarVisible; |
|
}, |
|
setSidebarVisibility: (state, action: PayloadAction<boolean>) => { |
|
state.isSidebarVisible = action.payload; |
|
}, |
|
setIsChangingChat: (state, action: PayloadAction<boolean>) => { |
|
state.isChangingChat = action.payload; |
|
}, |
|
setisUploadingEmbeddings: (state, action: PayloadAction<boolean>) => { |
|
state.uploadingEmbeddings = action.payload; |
|
}, |
|
setEmbeddingsText: (state, action) => { |
|
state.activeChatContext.push(action.payload); |
|
}, |
|
clearEmbeddings: (state) => { |
|
state.activeChatContext = []; |
|
}, |
|
clearActiveMessages: (state) => { |
|
state.activeChatMessages = []; |
|
}, |
|
}, |
|
}); |
|
|
|
export const { |
|
addMessage, |
|
setIsListening, |
|
setActiveMessages, |
|
toggleSidebar, |
|
setActiveContext, |
|
setSidebarVisibility, |
|
setIsChangingChat, |
|
setEmbeddingsText, |
|
clearEmbeddings, |
|
clearActiveMessages, |
|
setisUploadingEmbeddings, |
|
setActiveChatPrompt, |
|
toggleSavingPrompt, |
|
} = chatSlice.actions; |
|
|
|
export default chatSlice.reducer; |
|
|