diff --git a/src/alpaca.gresource.xml b/src/alpaca.gresource.xml
index 071b811..3f30c15 100644
--- a/src/alpaca.gresource.xml
+++ b/src/alpaca.gresource.xml
@@ -3,7 +3,10 @@
style.css
style-dark.css
+ icons/library-symbolic.svg
icons/paper-plane-symbolic.svg
+ icons/globe-symbolic.svg
+ icons/controls-big-symbolic.svg
window.ui
gtk/help-overlay.ui
diff --git a/src/icons/controls-big-symbolic.svg b/src/icons/controls-big-symbolic.svg
new file mode 100644
index 0000000..7965431
--- /dev/null
+++ b/src/icons/controls-big-symbolic.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/src/icons/globe-symbolic.svg b/src/icons/globe-symbolic.svg
new file mode 100644
index 0000000..812ec51
--- /dev/null
+++ b/src/icons/globe-symbolic.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/src/icons/library-symbolic.svg b/src/icons/library-symbolic.svg
new file mode 100644
index 0000000..f9f7515
--- /dev/null
+++ b/src/icons/library-symbolic.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/src/window.py b/src/window.py
index f6cd054..d1fb19f 100644
--- a/src/window.py
+++ b/src/window.py
@@ -50,7 +50,6 @@ class AlpacaWindow(Adw.ApplicationWindow):
model_tweaks = {"temperature": 0.7, "seed": 0, "keep_alive": 5}
local_models = []
pulling_models = {}
- current_chat_elements = [] #Used for deleting
chats = {"chats": {_("New Chat"): {"messages": []}}, "selected_chat": "New Chat"}
attached_image = {"path": None, "base64": None}
@@ -284,11 +283,11 @@ class AlpacaWindow(Adw.ApplicationWindow):
self.get_application().send_notification(None, notification)
def delete_message(self, message_element):
- message_index = self.current_chat_elements.index(message_element)
- del self.chats["chats"][self.chats["selected_chat"]]["messages"][message_index]
- self.chat_container.remove(message_element)
- del self.current_chat_elements[message_index]
- self.save_history()
+ message_index = int(message_element.get_name())
+ if message_index < len(self.chats["chats"][self.chats["selected_chat"]]["messages"]):
+ self.chats["chats"][self.chats["selected_chat"]]["messages"][message_index] = None
+ self.chat_container.remove(message_element)
+ self.save_history()
def show_message(self, msg:str, bot:bool, footer:str=None, image_base64:str=None):
message_text = Gtk.TextView(
@@ -342,12 +341,12 @@ class AlpacaWindow(Adw.ApplicationWindow):
message_box.append(image)
message_box.append(message_text)
- self.current_chat_elements.append(Gtk.Overlay(css_classes=["message"]))
- self.current_chat_elements[-1].set_child(message_box)
+ overlay = Gtk.Overlay(css_classes=["message"], name=str(len(self.chats["chats"][self.chats["selected_chat"]]["messages"])-1))
+ overlay.set_child(message_box)
- delete_button.connect("clicked", lambda button, element=self.current_chat_elements[-1]: self.delete_message(element))
- self.current_chat_elements[-1].add_overlay(delete_button)
- self.chat_container.append(self.current_chat_elements[-1])
+ delete_button.connect("clicked", lambda button, element=overlay: self.delete_message(element))
+ overlay.add_overlay(delete_button)
+ self.chat_container.append(overlay)
if bot:
self.bot_message = message_buffer
@@ -630,7 +629,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
subtitle = "Image recognition" if model_info["image"] else None
)
link_button = Gtk.Button(
- icon_name = "web-browser-symbolic",
+ icon_name = "globe-symbolic",
vexpand = False,
valign = 3,
css_classes = ["success"]
@@ -654,12 +653,13 @@ class AlpacaWindow(Adw.ApplicationWindow):
def load_history_into_chat(self):
for widget in list(self.chat_container): self.chat_container.remove(widget)
for message in self.chats['chats'][self.chats["selected_chat"]]['messages']:
- if message['role'] == 'user':
- self.show_message(message['content'], False, f"\n\n{message['date']}", message['images'][0] if 'images' in message and len(message['images']) > 0 else None)
- else:
- self.show_message(message['content'], True, f"\n\n{message['model']}\t|\t{message['date']}")
- self.add_code_blocks()
- self.bot_message = None
+ if message:
+ if message['role'] == 'user':
+ self.show_message(message['content'], False, f"\n\n{message['date']}", message['images'][0] if 'images' in message and len(message['images']) > 0 else None)
+ else:
+ self.show_message(message['content'], True, f"\n\n{message['model']}\t|\t{message['date']}")
+ self.add_code_blocks()
+ self.bot_message = None
def load_history(self):
if os.path.exists(os.path.join(self.config_dir, "chats.json")):
@@ -668,6 +668,9 @@ class AlpacaWindow(Adw.ApplicationWindow):
self.chats = json.load(f)
if "selected_chat" not in self.chats or self.chats["selected_chat"] not in self.chats["chats"]: self.chats["selected_chat"] = list(self.chats["chats"].keys())[0]
if len(list(self.chats["chats"].keys())) == 0: self.chats["chats"][_("New Chat")] = {"messages": []}
+ for chat_name, content in self.chats['chats'].items():
+ for i, content in enumerate(content['messages']):
+ if not content: del self.chats['chats'][chat_name]['messages'][i]
except Exception as e:
self.chats = {"chats": {_("New Chat"): {"messages": []}}, "selected_chat": _("New Chat")}
self.load_history_into_chat()
diff --git a/src/window.ui b/src/window.ui
index f537bae..66bdb92 100644
--- a/src/window.ui
+++ b/src/window.ui
@@ -103,7 +103,7 @@
Manage models
@@ -242,7 +242,7 @@