diff --git a/mobile/app/lib/components/prompt_box/prompt_box_widget.dart b/mobile/app/lib/components/prompt_box/prompt_box_widget.dart index 5870e62..d149eea 100644 --- a/mobile/app/lib/components/prompt_box/prompt_box_widget.dart +++ b/mobile/app/lib/components/prompt_box/prompt_box_widget.dart @@ -235,8 +235,7 @@ class _PromptBoxWidgetState extends State { } void updateFromLatestInput(String input) { - Server s = Server(); - s.setPrompt(input); - print(s.getResponse()); + Server().getResponseWhenReady(input); + // TODO: Refresh the page with the prompt & response. } } diff --git a/mobile/app/lib/util/server.dart b/mobile/app/lib/util/server.dart index dd8646e..8a82d7b 100644 --- a/mobile/app/lib/util/server.dart +++ b/mobile/app/lib/util/server.dart @@ -5,17 +5,33 @@ import 'package:app/components/conversation_thread/chat.dart'; import 'package:app/util/speech_to_text.dart'; +// Uses Singleton design pattern to ensure that any server references across the app are using the same instance. class Server { + + // STT variables + static final SpeechToText stt = SpeechToText(); + static late bool _speechEnabled; + + static final Server _single_server = Server._internal(); + + // TODO: Verify all different components of STT, TTS, LLM, etc have been initialized. + // TODO: Handshake w/ server to validate identity + factory Server() { + // Speech-To-Text engine activation. + _speechEnabled = stt.isSpeechEnabled(); + + return _single_server; + } + + Server._internal(); + // TODO: One-time process to establish server connection is required for easy setup/maintenance. // Server variables - final url = "http://10.0.2.2:11434"; + final url = "http://10.0.2.2:11434/api/"; + String endpoint = ""; Map headers = {'Content-Type': 'application/json'}; - - // Model variables - final SpeechToText stt = SpeechToText(); - + // Status variables - late bool _speechEnabled; bool _historyEnabled = true; // Context variables @@ -29,14 +45,6 @@ class Server { String response = ""; int conversationID = 0; - Server() { - // Speech-To-Text engine activation. - _speechEnabled = stt.isSpeechEnabled(); - - // TODO: Initialize all different components of STT, TTS, LLM, etc. - // TODO: Handshake w/ server to validate identity - } - List getConversationByID(conversationID) { // TODO: Implement conversation IDs & retrieval from server this.conversationID = conversationID; @@ -61,7 +69,7 @@ class Server { // TODO: In case on-device STT is unavailable, use server-side STT service. if (!_speechEnabled) "Unable to process Speech-To-Text on-device."; - setPrompt(stt.getTextWhenReady() as String); + prompt = stt.getTextWhenReady() as String; httpSendRequest(); return response; @@ -73,9 +81,6 @@ class Server { return response; } - // Arbitrary prompt, used for standard text interaction rather than STT. - void setPrompt(String p) => prompt = p; - // Get the last response or request a response from the server. String getResponse() { httpSendRequest(); @@ -94,6 +99,7 @@ class Server { if(_historyEnabled) { chats = [...chats, Chat(prompt, true)]; + endpoint = "chat"; List> messageList = convertMessages(); @@ -104,6 +110,7 @@ class Server { }; } else { + endpoint = "generate"; data = { "model": "llama3", "prompt": prompt, @@ -118,11 +125,7 @@ class Server { // Send the HTTP request to the server. void httpSendRequest() async { String json = constructPrompt(); - print("\n\n$json\n\n"); - - String endpoint = "/api/"; - if(_historyEnabled) endpoint += "chat"; - else endpoint += "generate"; + print("\n\nJSON:\n$json\n\n"); // Send the HTTP POST request final serverResponse = await http.post( @@ -133,10 +136,17 @@ class Server { if (serverResponse.statusCode == 200) { Map re = jsonDecode(serverResponse.body); - response = re["response"]!; - } else { - response = ('Error: ${serverResponse.statusCode}'); + if(_historyEnabled) { + response = re["message"]["content"]; + chats = [...chats, Chat(response, false)]; + } else { + response = re["response"]; + } + } + print("\n\nresponse:\n$response"); + print("\nRaw chats variable:\n"); + for(Chat c in chats) { + print(c.content); } - chats.add(Chat(response, false)); } } \ No newline at end of file