diff --git a/app/backend/InputOutputHandler.tsx b/app/backend/InputOutputHandler.tsx index e56bbe9..68e552a 100644 --- a/app/backend/InputOutputHandler.tsx +++ b/app/backend/InputOutputHandler.tsx @@ -4,6 +4,7 @@ import ConversationFrontend from '../components/ConversationFrontend'; import InputFrontend from "../components/InputFrontend"; import { sendToVoiceRecognition } from "./voice_backend" import axios from "axios"; +import { changeHistory, checkCredentials, getHistory } from './database'; import { useChatHistory } from '../hooks/useChatHistory'; const InputOutputBackend: React.FC = () => { @@ -14,14 +15,14 @@ const InputOutputBackend: React.FC = () => { } // Define state variables for user preferences and messages - const [chatHistory, setSelectedIndex, setChatHistory, updateMessage] = useChatHistory() + const [chatHistory, setChatHistory, setSelectedIndex, updateMessage] = useChatHistory() const [preferredCurrency, setPreferredCurrency] = useState("USD"); const [preferredLanguage, setPreferredLanguage] = useState("english"); const [timeFormat, setTimeFormat] = useState("24-hour"); const [preferredMeasurement, setPreferredMeasurement] = useState("metric"); const [timeZone, setTimeZone] = useState("GMT"); const [dateFormat, setDateFormat] = useState("DD-MM-YYYY"); - const [messages, setMessages] = useState(chatHistory.chats[chatHistory.selectedIndex].messages || []); + const [messages, setMessages] = useState(chatHistory.chats[chatHistory.selectedIndex]?.messages || []); const [myBoolean, setMyBoolean] = useState(false); const [systemMessage, setSystemMessage] = useState("You are a helpful assistant") const apiURL = new URL("http://localhost:5000/interstellar_ai/api/ai_create") @@ -31,26 +32,22 @@ const InputOutputBackend: React.FC = () => { apiURL.hostname = "localhost" } - console.log(setSelectedIndex) + useEffect(() => { -useEffect(() => { console.log("History", chatHistory); console.log("Messages", messages); // Get the current chat's messages - const currentMessages = chatHistory.chats[chatHistory.selectedIndex].messages || []; + const currentMessages = chatHistory.chats[chatHistory.selectedIndex]?.messages || []; - // If the selected chat has messages, set them - if (currentMessages.length > 0) { + // If currentMessages is not empty, update messages only if it's not the same + if (currentMessages.length > 0 && JSON.stringify(currentMessages) !== JSON.stringify(messages)) { setMessages(currentMessages); - } else if (currentMessages.length === 0) { - // When creating a new chat and no messages exist yet, set default messages - addMessage("system", systemMessage) - addMessage("assistant", "Hello! How can I help you?") - console.log(systemMessage) + } else if (messages.length === 0) { + setMessages([{ role: "system", content: systemMessage }, { role: "assistant", content: "Hello! How can I help you?" }]); } -}, [chatHistory, chatHistory.selectedIndex, systemMessage]); +}, [chatHistory, setSelectedIndex]); // Update messages when any of the settings change useEffect(() => { @@ -83,9 +80,13 @@ useEffect(() => { }, [preferredCurrency, preferredLanguage, timeFormat, preferredMeasurement, timeZone, dateFormat, myBoolean]); useEffect(() => { - const messageIndex = 0 // system prompt is the first so index 0 - updateMessage(messageIndex, systemMessage) - console.log(messages) + const updateSystemprompt = (prompt: string) => { + setMessages(prevMessages => { + const newMessage = { role: "system", content: prompt } + return [newMessage, ...prevMessages] + }) + } + updateSystemprompt },[systemMessage]) @@ -187,6 +188,17 @@ useEffect(() => { } const messageIndex = chatHistory.chats[chatHistory.selectedIndex].messages.length-1 updateMessage(messageIndex,newContent) + // setMessages((prevMessages) => { + // const updatedMessages = prevMessages.slice(); // Create a shallow copy of the current messages + // if (updatedMessages.length > 0) { + // const lastMessage = updatedMessages[updatedMessages.length - 1]; + // updatedMessages[updatedMessages.length - 1] = { + // ...lastMessage, // Keep the existing role and other properties + // content: newContent, // Update only the content + // }; + // } + // return updatedMessages; // Return the updated array + // }); }; const addMessage = (role: string, content: string) => { diff --git a/app/backend/ProcessMemory.ts b/app/backend/ProcessMemory.ts new file mode 100644 index 0000000..5765138 --- /dev/null +++ b/app/backend/ProcessMemory.ts @@ -0,0 +1,19 @@ +/* import { Settings } from 'electron' + +type Message = { + role: string + content: string +} + +type Chat = { + name: string + messages: Message[] +} + +type Data = { + chats: Chat[] + settings: Settings[] +} */ + + + diff --git a/app/components/AI.tsx b/app/components/AI.tsx index 824f6d6..a4db7fa 100644 --- a/app/components/AI.tsx +++ b/app/components/AI.tsx @@ -2,10 +2,14 @@ import React from 'react'; import InputOutputBackend from '../backend/InputOutputHandler'; -const AI: React.FC = () => { +interface AIProps{ + selectedIndex:number +} + +const AI: React.FC = ({selectedIndex}) => { return (
- +
); }; diff --git a/app/components/History.tsx b/app/components/History.tsx index 7e23d6b..92b86e8 100644 --- a/app/components/History.tsx +++ b/app/components/History.tsx @@ -2,13 +2,16 @@ import React, { useState } from 'react'; import { useChatHistory } from '../hooks/useChatHistory'; const History: React.FC = () => { - const [chatHistory, setSelectedIndex] = useChatHistory() + const [chatHistory, setChatHistory, setSelectedIndex] = useChatHistory() const [isEditing, setIsEditing] = useState(false); const [inputValue, setInputValue] = useState(''); - const handleEditButtonClick = () => { setIsEditing(true); + + /* Thank you Eslint for this masterpiece of a code snippet */ + setChatHistory(chatHistory) + /* Wow i feel so secure now */ }; const handleInputChange = (e: React.ChangeEvent) => { @@ -35,10 +38,7 @@ const History: React.FC = () => { {/* Populate with history items */} {chatHistory.chats.map((chats, index) => (
  • - handleHistoryClick(index)} style={{ - backgroundColor: chatHistory.selectedIndex == index ? "var(--input-button-color)" : "", - borderRadius:"5px" - }}> + handleHistoryClick(index)}> {chatHistory.chats[index].name}
  • diff --git a/app/components/settings/settingUtils.ts b/app/components/settings/settingUtils.ts index f6cd00d..de08012 100644 --- a/app/components/settings/settingUtils.ts +++ b/app/components/settings/settingUtils.ts @@ -45,6 +45,7 @@ export const sendToDatabase = async () => { if (useName && usePassword) { const result = await changeSettings(useName, usePassword, JSON.parse(exportSettings())) if (result == true) { + alert('Data has been transferred') window.location.reload(); } } diff --git a/app/hooks/useChatHistory.tsx b/app/hooks/useChatHistory.tsx index b2aceb0..b153eef 100644 --- a/app/hooks/useChatHistory.tsx +++ b/app/hooks/useChatHistory.tsx @@ -19,7 +19,8 @@ interface GlobalChatHistory { let globalChatHistory: GlobalChatHistory = { chats: [ - { name: "Welcome!", messages: [{role:"system",content:"you are a helpful assistant"},{role:"assistant",content:"Hello! How can I help you?"}], timestamp: 4 }, + { name: "Chat 1", messages: [{role:"system",content:"you are a helpful assistant"},{role:"assistant",content:"how can i help you"}], timestamp: 4 }, + { name: "Chat 2", messages: [{role:"system",content:"you are a helpful assistant"},{role:"assistant",content:"how can i help you"}], timestamp: 4 }, ], selectedIndex:0 } @@ -30,7 +31,7 @@ const setGlobalState = (newState: GlobalChatHistory): void => { listeners.forEach((listener) => listener(globalChatHistory)) } -export const useChatHistory = (): [GlobalChatHistory, (index:number)=>void, (newState:GlobalChatHistory) => void,(messageIndex: number, newContent:string)=> void] => { +export const useChatHistory = (): [GlobalChatHistory, (newState:GlobalChatHistory) => void, (index:number)=>void, (messageIndex: number, newContent:string)=> void] => { const [state, setState] = useState(globalChatHistory) useEffect(() => { @@ -64,5 +65,5 @@ export const useChatHistory = (): [GlobalChatHistory, (index:number)=>void, (ne } } - return [state, setSelectedIndex, setGlobalState, updateMessage] + return [state, setGlobalState, setSelectedIndex, updateMessage] } \ No newline at end of file diff --git a/app/page.tsx b/app/page.tsx index 3c77911..832fbb7 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -14,6 +14,7 @@ const LandingPage: React.FC = () => { const [showDivs, setShowDivs] = useState(true); const [view, setView] = useState<'AI' | 'FAQ' | 'Documentation' | 'Credits'>('AI'); const conversationRef = useRef(null); + const [selectedHistoryIndex, setSelectedHistoryIndex] = useState(0) const [primaryColor, setPrimaryColor] = useState("#fefefe"); const [secondaryColor, setSecondaryColor] = useState("#fefefe"); @@ -91,13 +92,13 @@ const LandingPage: React.FC = () => {
    {showDivs && (
    - +
    )}
    - {view === 'AI' && } + {view === 'AI' && } {view === 'FAQ' && } {view === 'Documentation' && } {view === 'Credits' && } diff --git a/deployment_scripts/linux/prepare_free.sh b/deployment_scripts/linux/prepare-free.sh similarity index 100% rename from deployment_scripts/linux/prepare_free.sh rename to deployment_scripts/linux/prepare-free.sh diff --git a/deployment_scripts/linux/prepare_nonfree.sh b/deployment_scripts/linux/prepare-nonfree.sh similarity index 100% rename from deployment_scripts/linux/prepare_nonfree.sh rename to deployment_scripts/linux/prepare-nonfree.sh diff --git a/deployment_scripts/linux/prepare_all.sh b/deployment_scripts/linux/prepare_all.sh deleted file mode 100644 index 03dd10c..0000000 --- a/deployment_scripts/linux/prepare_all.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -chmod +x root.sh -pkexec ./root.sh -npm install -npm run build - -cd py -python3 -m venv venv -source venv/bin/activate -python3 -m pip install -r requirements.txt - -ollama pull qwen2-math:1.5b -ollama pull qwen2.5-coder:1.5b -ollama pull phi3.5 - -ollama pull mathstral -ollama pull qwen2.5-coder -ollama pull qwen2.5 - -ollama pull qwen2-math:1.5b -ollama pull starcoder2 -ollama pull llama3.2 - -ollama pull wizard-math -ollama pull starcoder2:7b -ollama pull llama3.1 - -cd .. -chmod +x run.sh \ No newline at end of file diff --git a/deployment_scripts/linux/root.sh b/deployment_scripts/linux/root.sh index 312679d..7fc9b13 100644 --- a/deployment_scripts/linux/root.sh +++ b/deployment_scripts/linux/root.sh @@ -1,6 +1,6 @@ #!/bin/bash -apt install npm nodejs python3-full ffmpeg libgtk-3-0t64 libnotify4 libnss3 libxss1 libasound2t64 build-essential cmake -y +apt install npm nodejs python3-full ffmpeg libgtk-3-0t64 libnotify4 libnss3 libxss1 libasound2 build-essential cmake -y if ! ollama; then curl -fsSL https://ollama.com/install.sh | sh fi diff --git a/deployment_scripts/linux/run.sh b/deployment_scripts/linux/run.sh index a4ad3f9..1220bae 100644 --- a/deployment_scripts/linux/run.sh +++ b/deployment_scripts/linux/run.sh @@ -9,7 +9,6 @@ cd .. npm start & pid_node=$! -sleep 2 npx electron . kill $pid_py diff --git a/deployment_scripts/windows/prepare_all.bat b/deployment_scripts/windows/prepare_all.bat deleted file mode 100644 index e610454..0000000 --- a/deployment_scripts/windows/prepare_all.bat +++ /dev/null @@ -1,4 +0,0 @@ -start /b scripts\prepare_py.bat -start /b scripts\prepare_npm.bat -start /b scripts\prepare_ollama_free.bat -start /b scripts\prepare_ollama_nonfree.bat \ No newline at end of file