forked from React-Group/interstellar_ai
		
	Compare commits
	
		
			7 commits
		
	
	
		
			2087f37468
			...
			f7cab6aec0
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f7cab6aec0 | |||
| 84be9fc2ba | |||
| f9d3a1f235 | |||
| 44cd249421 | |||
| d6e6cca0db | |||
| 5b50f1d971 | |||
| e279f01d42 | 
					 3 changed files with 68 additions and 58 deletions
				
			
		|  | @ -1,7 +1,12 @@ | ||||||
| import React, { ForwardedRef, useEffect, useRef } from 'react'; | import React, { ForwardedRef, useEffect, useRef } from 'react'; | ||||||
| 
 | 
 | ||||||
|  | type Message = { | ||||||
|  |   role: string | ||||||
|  |   content: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
| interface ConversationProps { | interface ConversationProps { | ||||||
|   messages: string[]; |   messages: Message[]; | ||||||
|   onResendClick: () => void; |   onResendClick: () => void; | ||||||
|   onEditClick: () => void; |   onEditClick: () => void; | ||||||
|   onCopyClick: () => void; |   onCopyClick: () => void; | ||||||
|  | @ -22,14 +27,16 @@ const ConversationFrontend = React.forwardRef<HTMLDivElement, ConversationProps> | ||||||
|       <div className="output"> |       <div className="output"> | ||||||
|         <div className="conversation resize" id="conversation" ref={ref}> |         <div className="conversation resize" id="conversation" ref={ref}> | ||||||
|           {messages.map((message, index) => { |           {messages.map((message, index) => { | ||||||
|             const isUserMessage = message.startsWith('User:'); |             let isUserMessage | ||||||
|             console.log(messages) |             if (message.role == "user") { | ||||||
|  |               isUserMessage = message | ||||||
|  |             } | ||||||
|             return ( |             return ( | ||||||
|               <div |               <div | ||||||
|                 key={index} |                 key={index} | ||||||
|                 className={isUserMessage ? 'user-message' : 'ai-message'} |                 className={isUserMessage ? 'user-message' : 'ai-message'} | ||||||
|               > |               > | ||||||
|                 <p> {message}</p> |                 <p> {message.content}</p> | ||||||
|               </div> |               </div> | ||||||
|             ); |             ); | ||||||
|           })} |           })} | ||||||
|  |  | ||||||
|  | @ -27,30 +27,30 @@ const handleCopyClick = () => { | ||||||
| const InputOutputBackend: React.FC = () => { | const InputOutputBackend: React.FC = () => { | ||||||
|     const [accessToken, setAccessToken] = useState("") |     const [accessToken, setAccessToken] = useState("") | ||||||
|     const workerRef = useRef<Worker | null>(null) |     const workerRef = useRef<Worker | null>(null) | ||||||
|  |     type Message = { | ||||||
|  |       role: string | ||||||
|  |       content: string | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     const handleSendClick = (message:string) => { |     const handleSendClick = (message:string) => { | ||||||
|         var system = "You give really short answers (maximum of 30 sentences). The following is the chat history." |       var system:Message = {role:"system" ,content:"You are a helpful assistant."} | ||||||
|         for (let index = 0; index < messages.length; index++) { |  | ||||||
|             system += messages[index] + " "; |  | ||||||
|         }; |  | ||||||
| 
 | 
 | ||||||
|         HandlePostRequest(message, "phi3.5", system) |       addMessage("user", message); | ||||||
|  |       console.log("added User Message") | ||||||
|        |        | ||||||
|         addMessage('User: ' + message); |       HandlePostRequest([...messages, { role: "user", content: message }], "phi3.5", system); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     const [messages, setMessages] = useState([ |     const [messages, setMessages] = useState([ | ||||||
|         'User: Hello!', |       { role:"assistant", content:'Hello. I\'m Your AI Virtual Assistant' }  | ||||||
|         'AI: Hi there!', |  | ||||||
|         'User: How are you?', |  | ||||||
|         'AI: I’m good, thank you!' |  | ||||||
|     ]); |     ]); | ||||||
| 
 | 
 | ||||||
|     const addMessage = (message: string) => { |     const addMessage = (role:string ,content: string) => { | ||||||
|         setMessages((prevMessages) => [...prevMessages, message]); |         setMessages((prevMessages) => [...prevMessages, {role,content}]); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|     useEffect(() => { |     useEffect(() => { | ||||||
|         workerRef.current = new Worker(new URL("./ProcessAPI.js", import.meta.url)) |         workerRef.current = new Worker(new URL("./ProcessAPI.js", import.meta.url)) | ||||||
|         workerRef.current.postMessage({}) |         workerRef.current.postMessage({}) | ||||||
|  | @ -65,20 +65,11 @@ const InputOutputBackend: React.FC = () => { | ||||||
|         } |         } | ||||||
|     },[]) |     },[]) | ||||||
|          |          | ||||||
|     const HandleGetRequest = (message: string, ai_model: string, system_prompt: string) => { |         const HandlePostRequest = (messages: Message[], ai_model: string, system_prompt: Message) => { | ||||||
|           if (workerRef.current) { |           if (workerRef.current) { | ||||||
|             workerRef.current.postMessage({ functionName: "getResponse", access_token: accessToken, message: message, ai_model: ai_model, system_prompt: system_prompt }) |             workerRef.current.postMessage({ functionName: "postRequest", access_token: accessToken, messages: messages, ai_model: ai_model, system_prompt: system_prompt }) | ||||||
|             workerRef.current.onmessage = (e) => { |             workerRef.current.onmessage = (e) => { | ||||||
|                 addMessage("AI: " + e.data) |               addMessage("assistant",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) |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | @ -97,7 +88,7 @@ const InputOutputBackend: React.FC = () => { | ||||||
|         onMicClick={handleMicClick} |         onMicClick={handleMicClick} | ||||||
|       /> |       /> | ||||||
|     </div> |     </div> | ||||||
|   ); |     ) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export default InputOutputBackend | export default InputOutputBackend | ||||||
|  |  | ||||||
|  | @ -1,16 +1,33 @@ | ||||||
| import axios from 'axios' | import axios from 'axios' | ||||||
|  | import { type } from 'os'; | ||||||
| 
 | 
 | ||||||
| onmessage = function (e) { | onmessage = function (e) { | ||||||
|     const { functionName = "getAccess", access_token = "", message = "", ai_model = "phi3.5", system_prompt = "You are a helpful assistant" } = e.data |     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 | ||||||
|     const data = { |      | ||||||
|         "ai_model": ai_model, |     let data = { | ||||||
|         "message": message, |         ai_model: ai_model, | ||||||
|         "system_prompt": system_prompt, |         messages: messages, | ||||||
|         "access_token": access_token |         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) { |     switch (functionName) { | ||||||
|         case "getAccess": |         case "getAccess": | ||||||
|             axios.get('https://127.0.0.1:5000/interstellar/api/ai_create') |             console.log("getting access...") | ||||||
|  |             axios.get('https://localhost:5000/interstellar/api/ai_create') | ||||||
|             .then(Response => { |             .then(Response => { | ||||||
|                 postMessage(Response.data.access_token) |                 postMessage(Response.data.access_token) | ||||||
|             }).catch(error => { |             }).catch(error => { | ||||||
|  | @ -18,21 +35,16 @@ onmessage = function (e) { | ||||||
|             }) |             }) | ||||||
|             break |             break | ||||||
|         case "postRequest": |         case "postRequest": | ||||||
|             axios.post('https://127.0.0.1:5000/interstellar/api/ai_send', data) |             messages.unshift(system_prompt) | ||||||
|  |             console.log("sending...") | ||||||
|  |             console.log(messages) | ||||||
|  |             axios.post('https://localhost:5000/interstellar/api/ai_send', data) | ||||||
|             .then(Response => { |             .then(Response => { | ||||||
|                     postMessage(Response.data) |                 getResponse() | ||||||
|             }).catch(error => { |             }).catch(error => { | ||||||
|                 console.error("Error:", error) |                 console.error("Error:", error) | ||||||
|             }) |             }) | ||||||
|             break |             break | ||||||
|         case "getResponse": |  | ||||||
|             axios.get('https://127.0.0.1:5000/interstellar/api/ai_get?access_token=' + access_token) |  | ||||||
|                 .then(Response => { |  | ||||||
|                     postMessage(Response.data.response) |  | ||||||
|                 }).catch(error => { |  | ||||||
|                     console.error("Error with GET response request:", error) |  | ||||||
|                 }) |  | ||||||
|             break |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue