File size: 2,534 Bytes
5306da4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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;