diff --git a/src/connection_handler.py b/src/connection_handler.py index 4ad9cba..b620433 100644 --- a/src/connection_handler.py +++ b/src/connection_handler.py @@ -9,6 +9,8 @@ from time import sleep logger = getLogger(__name__) +window = None + def log_output(pipe): with open(os.path.join(data_dir, 'tmp.log'), 'a') as f: with pipe: @@ -33,6 +35,7 @@ class instance(): self.idle_timer_stop_event=threading.Event() self.idle_timer=None self.instance=None + self.busy=0 if not self.remote: self.start() @@ -45,6 +48,7 @@ class instance(): return headers if len(headers.keys()) > 0 else None def request(self, connection_type:str, connection_url:str, data:dict=None, callback:callable=None) -> requests.models.Response: + self.busy += 1 if self.idle_timer: self.idle_timer_stop_event.set() self.idle_timer=None @@ -63,27 +67,29 @@ class instance(): for line in response.iter_lines(): if line: callback(json.loads(line.decode("utf-8"))) - response = response else: response = requests.post(connection_url, headers=self.get_headers(True), data=data, stream=False) case "DELETE": response = requests.delete(connection_url, headers=self.get_headers(False), json=data) + self.busy -= 1 if not self.idle_timer: self.start_timer() return response def run_timer(self): - if not self.idle_timer_stop_event.wait(self.idle_timer_delay*60): + if not self.idle_timer_stop_event.wait(self.idle_timer_delay*1): + window.show_toast(_("Ollama instance was shut down due to inactivity"), window.main_overlay) self.stop() def start_timer(self): - if self.idle_timer: - self.idle_timer_stop_event.set() - self.idle_timer=None - if self.idle_timer_delay > 0: - self.idle_timer_stop_event.clear() - self.idle_timer = threading.Thread(target=self.run_timer) - self.idle_timer.start() + if self.busy == 0: + if self.idle_timer: + self.idle_timer_stop_event.set() + self.idle_timer=None + if self.idle_timer_delay > 0 and self.busy == 0: + self.idle_timer_stop_event.clear() + self.idle_timer = threading.Thread(target=self.run_timer) + self.idle_timer.start() def start(self): if not os.path.isdir(os.path.join(cache_dir, 'tmp/ollama')): diff --git a/src/custom_widgets/message_widget.py b/src/custom_widgets/message_widget.py index e7a5233..4a1a286 100644 --- a/src/custom_widgets/message_widget.py +++ b/src/custom_widgets/message_widget.py @@ -450,6 +450,7 @@ class message(Gtk.Overlay): self.dt = datetime.datetime.now() self.add_footer(self.dt) window.show_notification(chat.get_name(), self.text[:200] + (self.text[200:] and '...'), Gio.ThemedIcon.new("chat-message-new-symbolic")) + window.ollama_instance.start_timer() window.save_history(chat) else: sys.exit() diff --git a/src/window.py b/src/window.py index afdd4da..b42cbad 100644 --- a/src/window.py +++ b/src/window.py @@ -836,6 +836,7 @@ Generate a title following these rules: message_widget.window = self chat_widget.window = self model_widget.window = self + connection_handler.window = self drop_target = Gtk.DropTarget.new(Gdk.FileList, Gdk.DragAction.COPY) drop_target.connect('drop', self.on_file_drop)