diff --git a/app/ConversationFrontend.tsx b/app/ConversationFrontend.tsx index 80cf49b..00948db 100644 --- a/app/ConversationFrontend.tsx +++ b/app/ConversationFrontend.tsx @@ -1,7 +1,12 @@ import React, { ForwardedRef, useEffect, useRef } from 'react'; +type Message = { + role: string + content: string +} + interface ConversationProps { - messages: string[]; + messages: Message[]; onResendClick: () => void; onEditClick: () => void; onCopyClick: () => void; @@ -22,14 +27,16 @@ const ConversationFrontend = React.forwardRef
{messages.map((message, index) => { - const isUserMessage = message.startsWith('User:'); - console.log(messages) + let isUserMessage + if (message.role == "user") { + isUserMessage = message + } return (
-

{message}

+

{message.content}

); })} diff --git a/app/InputOutputHandler.tsx b/app/InputOutputHandler.tsx index 2bbe5b0..288aaa4 100644 --- a/app/InputOutputHandler.tsx +++ b/app/InputOutputHandler.tsx @@ -27,30 +27,30 @@ const handleCopyClick = () => { const InputOutputBackend: React.FC = () => { const [accessToken, setAccessToken] = useState("") const workerRef = useRef(null) + type Message = { + role: string + content: string + } - const handleSendClick = (message: string) => { - var system = "You give really short answers (maximum of 30 sentences). The following is the chat history." - for (let index = 0; index < messages.length; index++) { - system += messages[index] + " "; - }; + const handleSendClick = (message:string) => { + var system:Message = {role:"system" ,content:"You are a helpful assistant."} - HandlePostRequest(message, "phi3.5", system) - - addMessage('User: ' + message); + addMessage("user", message); + console.log("added User Message") + + HandlePostRequest([...messages, { role: "user", content: message }], "phi3.5", system); }; const [messages, setMessages] = useState([ - 'User: Hello!', - 'AI: Hi there!', - 'User: How are you?', - 'AI: I’m good, thank you!' + { role:"assistant", content:'Hello. I\'m Your AI Virtual Assistant' } ]); - const addMessage = (message: string) => { - setMessages((prevMessages) => [...prevMessages, message]); + const addMessage = (role:string ,content: string) => { + setMessages((prevMessages) => [...prevMessages, {role,content}]); }; + useEffect(() => { workerRef.current = new Worker(new URL("./ProcessAPI.js", import.meta.url)) workerRef.current.postMessage({}) @@ -64,21 +64,12 @@ const InputOutputBackend: React.FC = () => { } } },[]) - - const HandleGetRequest = (message: string, ai_model: string, system_prompt: string) => { - if (workerRef.current) { - workerRef.current.postMessage({ functionName: "getResponse", access_token: accessToken, message: message, ai_model: ai_model, system_prompt: system_prompt }) + + const HandlePostRequest = (messages: Message[], ai_model: string, system_prompt: Message) => { + if (workerRef.current) { + workerRef.current.postMessage({ functionName: "postRequest", access_token: accessToken, messages: messages, ai_model: ai_model, system_prompt: system_prompt }) workerRef.current.onmessage = (e) => { - addMessage("AI: " + e.data) - } - } - } - - const HandlePostRequest = (message: string, ai_model: string, system_prompt: string) => { - if (workerRef.current) { - workerRef.current.postMessage({ functionName: "postRequest", access_token: accessToken, message: message, ai_model: ai_model, system_prompt: system_prompt }) - workerRef.current.onmessage = (e) => { - HandleGetRequest(message,ai_model,system_prompt) + addMessage("assistant",e.data) } } } @@ -97,7 +88,7 @@ const InputOutputBackend: React.FC = () => { onMicClick={handleMicClick} />
- ); + ) } export default InputOutputBackend diff --git a/app/ProcessAPI.js b/app/ProcessAPI.js index c161c62..d02861b 100644 --- a/app/ProcessAPI.js +++ b/app/ProcessAPI.js @@ -1,37 +1,49 @@ import axios from 'axios' +import { type } from 'os'; onmessage = function (e) { - const { functionName = "getAccess", access_token = "", message = "", ai_model = "phi3.5", system_prompt = "You are a helpful assistant" } = e.data - const data = { - "ai_model": ai_model, - "message": message, - "system_prompt": system_prompt, - "access_token": access_token + const { functionName = "getAccess", access_token = "", messages = [], ai_model = "phi3.5", system_prompt = {role:"system" ,content: "You are a helpful assistant that gives short answers"}} = e.data + + let data = { + ai_model: ai_model, + messages: messages, + access_token: access_token }; - switch (functionName) { - case "getAccess": - axios.get('https://127.0.0.1:5000/interstellar/api/ai_create') - .then(Response => { - postMessage(Response.data.access_token) - }).catch(error => { - console.error("Error with GET Token request:", error) - }) - break - case "postRequest": - axios.post('https://127.0.0.1:5000/interstellar/api/ai_send', data) - .then(Response => { - postMessage(Response.data) - }).catch(error => { - console.error("Error:", error) - }) - break - case "getResponse": - axios.get('https://127.0.0.1:5000/interstellar/api/ai_get?access_token=' + access_token) + + const getResponse = () => { + messageComplete:boolean = false + while(!messageComplete) + axios.get('https://localhost:5000/interstellar/api/ai_get?access_token=' + access_token) .then(Response => { postMessage(Response.data.response) + if (Response.data.status == 200) { + messageComplete = true + } }).catch(error => { console.error("Error with GET response request:", error) }) + } + + switch (functionName) { + case "getAccess": + console.log("getting access...") + axios.get('https://localhost:5000/interstellar/api/ai_create') + .then(Response => { + postMessage(Response.data.access_token) + }).catch(error => { + console.error("Error with GET Token request:", error) + }) + break + case "postRequest": + messages.unshift(system_prompt) + console.log("sending...") + console.log(messages) + axios.post('https://localhost:5000/interstellar/api/ai_send', data) + .then(Response => { + getResponse() + }).catch(error => { + console.error("Error:", error) + }) break }