diff --git a/src/local_instance.py b/src/local_instance.py
index 4ab5f43..4a02586 100644
--- a/src/local_instance.py
+++ b/src/local_instance.py
@@ -1,27 +1,23 @@
# local_instance.py
-import subprocess, os
+import subprocess, os, threading
from time import sleep
instance = None
port = 11435
+data_dir = os.getenv("XDG_DATA_HOME")
-def start(data_dir):
+def start():
instance = subprocess.Popen(["/app/bin/ollama", "serve"], env={**os.environ, 'OLLAMA_HOST': f"127.0.0.1:{port}", "HOME": data_dir}, stderr=subprocess.PIPE, text=True)
print("Starting Alpaca's Ollama instance...")
sleep(1)
- while True:
- err = instance.stderr.readline()
- if err == '' and instance.poll() is not None:
- break
- if 'msg="inference compute"' in err: #Ollama outputs a line with this when it finishes loading, yeah
- break
print("Started Alpaca's Ollama instance")
def stop():
if instance: instance.kill()
print("Stopped Alpaca's Ollama instance")
-def reset(data_dir):
+def reset():
stop()
sleep(1)
- start(data_dir)
+ start()
+
diff --git a/src/window.py b/src/window.py
index fc979e1..f4bebe0 100644
--- a/src/window.py
+++ b/src/window.py
@@ -32,7 +32,6 @@ from . import dialogs, local_instance, connection_handler
@Gtk.Template(resource_path='/com/jeffser/Alpaca/window.ui')
class AlpacaWindow(Adw.ApplicationWindow):
config_dir = os.getenv("XDG_CONFIG_HOME")
- data_dir = os.getenv("XDG_DATA_HOME")
app_dir = os.getenv("FLATPAK_DEST")
__gtype_name__ = 'AlpacaWindow'
@@ -249,6 +248,13 @@ class AlpacaWindow(Adw.ApplicationWindow):
action_row.set_sensitive(False)
self.pull_model(model)
+ @Gtk.Template.Callback()
+ def closing_app(self, user_data):
+ if self.get_hide_on_close():
+ print("Hiding app...")
+ else:
+ print("Closing app...")
+ local_instance.stop()
def show_toast(self, message_type:str, message_id:int, overlay):
if message_type not in self.toast_messages or message_id > len(self.toast_messages[message_type] or message_id < 0):
@@ -779,7 +785,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
def connect_local(self):
self.run_remote = False
connection_handler.url = f"http://127.0.0.1:{local_instance.port}"
- local_instance.start(self.data_dir)
+ local_instance.start()
if self.verify_connection() == False: self.connection_error()
else: self.remote_connection_switch.set_active(False)
@@ -787,7 +793,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
if self.run_remote:
dialogs.reconnect_remote(self, connection_handler.url)
else:
- local_instance.reset(self.data_dir)
+ local_instance.reset()
self.show_toast("error", 7, self.main_overlay)
def connection_switched(self):
@@ -800,7 +806,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
else: local_instance.stop()
else:
connection_handler.url = f"http://127.0.0.1:{local_instance.port}"
- local_instance.start(self.data_dir)
+ local_instance.start()
if self.verify_connection() == False: self.connection_error()
self.update_list_available_models()
@@ -877,9 +883,9 @@ class AlpacaWindow(Adw.ApplicationWindow):
else:
self.remote_connection_switch.set_active(False)
connection_handler.url = f"http://127.0.0.1:{local_instance.port}"
- local_instance.start(self.data_dir)
+ local_instance.start()
else:
- local_instance.start(self.data_dir)
+ local_instance.start()
connection_handler.url = f"http://127.0.0.1:{local_instance.port}"
self.welcome_dialog.present(self)
if self.verify_connection() is False and self.run_remote == False: self.connection_error()
diff --git a/src/window.ui b/src/window.ui
index 2bb941a..9b88a1b 100644
--- a/src/window.ui
+++ b/src/window.ui
@@ -3,6 +3,7 @@
+
True
360
700