Added spinner for chats receiving messages
This commit is contained in:
parent
ed3136cffd
commit
a54ec6fa9d
@ -201,6 +201,10 @@ class chat_tab(Gtk.ListBoxRow):
|
|||||||
|
|
||||||
def __init__(self, chat_window:chat):
|
def __init__(self, chat_window:chat):
|
||||||
self.chat_window=chat_window
|
self.chat_window=chat_window
|
||||||
|
self.spinner = Gtk.Spinner(
|
||||||
|
spinning=True,
|
||||||
|
visible=False
|
||||||
|
)
|
||||||
self.label = Gtk.Label(
|
self.label = Gtk.Label(
|
||||||
label=self.chat_window.get_name(),
|
label=self.chat_window.get_name(),
|
||||||
tooltip_text=self.chat_window.get_name(),
|
tooltip_text=self.chat_window.get_name(),
|
||||||
@ -211,10 +215,16 @@ class chat_tab(Gtk.ListBoxRow):
|
|||||||
wrap_mode=2,
|
wrap_mode=2,
|
||||||
xalign=0
|
xalign=0
|
||||||
)
|
)
|
||||||
|
container = Gtk.Box(
|
||||||
|
orientation=0,
|
||||||
|
spacing=10
|
||||||
|
)
|
||||||
|
container.append(self.spinner)
|
||||||
|
container.append(self.label)
|
||||||
super().__init__(
|
super().__init__(
|
||||||
css_classes = ["chat_row"],
|
css_classes = ["chat_row"],
|
||||||
height_request = 45,
|
height_request = 45,
|
||||||
child = self.label
|
child = container
|
||||||
)
|
)
|
||||||
|
|
||||||
self.gesture = Gtk.GestureClick(button=3)
|
self.gesture = Gtk.GestureClick(button=3)
|
||||||
@ -316,8 +326,8 @@ class chat_list(Gtk.ListBox):
|
|||||||
tab = self.get_tab_by_name(old_chat_name)
|
tab = self.get_tab_by_name(old_chat_name)
|
||||||
if tab:
|
if tab:
|
||||||
new_chat_name = window.generate_numbered_name(new_chat_name, [tab.chat_window.get_name() for tab in self.tab_list])
|
new_chat_name = window.generate_numbered_name(new_chat_name, [tab.chat_window.get_name() for tab in self.tab_list])
|
||||||
tab.get_child().set_label(new_chat_name)
|
tab.label.set_label(new_chat_name)
|
||||||
tab.get_child().set_tooltip_text(new_chat_name)
|
tab.label.set_tooltip_text(new_chat_name)
|
||||||
tab.chat_window.set_name(new_chat_name)
|
tab.chat_window.set_name(new_chat_name)
|
||||||
if os.path.exists(os.path.join(data_dir, "chats", old_chat_name)):
|
if os.path.exists(os.path.join(data_dir, "chats", old_chat_name)):
|
||||||
shutil.move(os.path.join(data_dir, "chats", old_chat_name), os.path.join(data_dir, "chats", new_chat_name))
|
shutil.move(os.path.join(data_dir, "chats", old_chat_name), os.path.join(data_dir, "chats", new_chat_name))
|
||||||
|
@ -171,7 +171,8 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
"model": current_model,
|
"model": current_model,
|
||||||
"messages": self.convert_history_to_ollama(current_chat),
|
"messages": self.convert_history_to_ollama(current_chat),
|
||||||
"options": {"temperature": self.ollama_instance.tweaks["temperature"], "seed": self.ollama_instance.tweaks["seed"]},
|
"options": {"temperature": self.ollama_instance.tweaks["temperature"], "seed": self.ollama_instance.tweaks["seed"]},
|
||||||
"keep_alive": f"{self.ollama_instance.tweaks['keep_alive']}m"
|
"keep_alive": f"{self.ollama_instance.tweaks['keep_alive']}m",
|
||||||
|
"stream": True
|
||||||
}
|
}
|
||||||
|
|
||||||
self.message_text_view.get_buffer().set_text("", 0)
|
self.message_text_view.get_buffer().set_text("", 0)
|
||||||
@ -180,13 +181,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
current_chat.add_message(bot_id, current_model)
|
current_chat.add_message(bot_id, current_model)
|
||||||
m_element_bot = current_chat.messages[bot_id]
|
m_element_bot = current_chat.messages[bot_id]
|
||||||
m_element_bot.set_text()
|
m_element_bot.set_text()
|
||||||
thread = threading.Thread(target=self.run_message, args=(data, m_element_bot))
|
threading.Thread(target=self.run_message, args=(data, m_element_bot, current_chat)).start()
|
||||||
thread.start()
|
|
||||||
if len(data['messages']) == 1:
|
|
||||||
message_data = data["messages"][0].copy()
|
|
||||||
message_data['content'] = raw_message
|
|
||||||
generate_title_thread = threading.Thread(target=self.generate_chat_title, args=(message_data, current_chat.get_name()))
|
|
||||||
generate_title_thread.start()
|
|
||||||
|
|
||||||
@Gtk.Template.Callback()
|
@Gtk.Template.Callback()
|
||||||
def welcome_carousel_page_changed(self, carousel, index):
|
def welcome_carousel_page_changed(self, carousel, index):
|
||||||
@ -438,6 +433,10 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
messages = []
|
messages = []
|
||||||
for message_id, message in chat.messages_to_dict().items():
|
for message_id, message in chat.messages_to_dict().items():
|
||||||
new_message = message.copy()
|
new_message = message.copy()
|
||||||
|
if 'model' in new_message:
|
||||||
|
del new_message['model']
|
||||||
|
if 'date' in new_message:
|
||||||
|
del new_message['date']
|
||||||
if 'files' in message and len(message['files']) > 0:
|
if 'files' in message and len(message['files']) > 0:
|
||||||
del new_message['files']
|
del new_message['files']
|
||||||
new_message['content'] = ''
|
new_message['content'] = ''
|
||||||
@ -458,8 +457,6 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
return messages
|
return messages
|
||||||
|
|
||||||
def generate_chat_title(self, message, old_chat_name):
|
def generate_chat_title(self, message, old_chat_name):
|
||||||
if not old_chat_name.startswith(_("New Chat")):
|
|
||||||
return
|
|
||||||
logger.debug("Generating chat title")
|
logger.debug("Generating chat title")
|
||||||
prompt = f"""
|
prompt = f"""
|
||||||
Generate a title following these rules:
|
Generate a title following these rules:
|
||||||
@ -519,10 +516,13 @@ Generate a title following these rules:
|
|||||||
self.stop_button.set_visible(not send)
|
self.stop_button.set_visible(not send)
|
||||||
self.send_button.set_visible(send)
|
self.send_button.set_visible(send)
|
||||||
|
|
||||||
def run_message(self, data:dict, message_element:message_widget.message):
|
def run_message(self, data:dict, message_element:message_widget.message, chat:chat_widget.chat):
|
||||||
logger.debug("Running message")
|
logger.debug("Running message")
|
||||||
chat = message_element.get_parent().get_parent().get_parent().get_parent()
|
|
||||||
chat.busy = True
|
chat.busy = True
|
||||||
|
self.chat_list_box.get_tab_by_name(chat.get_name()).spinner.set_visible(True)
|
||||||
|
if len(data['messages']) == 1 and chat.get_name().startswith(_("New Chat")):
|
||||||
|
threading.Thread(target=self.generate_chat_title, args=(data['messages'][0].copy(), chat.get_name())).start()
|
||||||
|
|
||||||
self.chat_list_box.set_sensitive(False)
|
self.chat_list_box.set_sensitive(False)
|
||||||
if chat.welcome_screen:
|
if chat.welcome_screen:
|
||||||
chat.welcome_screen.set_visible(False)
|
chat.welcome_screen.set_visible(False)
|
||||||
@ -532,7 +532,7 @@ Generate a title following these rules:
|
|||||||
if self.regenerate_button:
|
if self.regenerate_button:
|
||||||
GLib.idle_add(self.chat_list_box.get_current_chat().remove, self.regenerate_button)
|
GLib.idle_add(self.chat_list_box.get_current_chat().remove, self.regenerate_button)
|
||||||
try:
|
try:
|
||||||
response = self.ollama_instance.request("POST", "api/generate", json.dumps(data), lambda data, message_element=message_element: GLib.idle_add(message_element.update_message, data))
|
response = self.ollama_instance.request("POST", "api/chat", json.dumps(data), lambda data, message_element=message_element: GLib.idle_add(message_element.update_message, data))
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
raise Exception('Network Error')
|
raise Exception('Network Error')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -699,7 +699,7 @@ Generate a title following these rules:
|
|||||||
|
|
||||||
def chat_actions(self, action, user_data):
|
def chat_actions(self, action, user_data):
|
||||||
chat_row = self.selected_chat_row
|
chat_row = self.selected_chat_row
|
||||||
chat_name = chat_row.get_child().get_label()
|
chat_name = chat_row.label.get_label()
|
||||||
action_name = action.get_name()
|
action_name = action.get_name()
|
||||||
if action_name in ('delete_chat', 'delete_current_chat'):
|
if action_name in ('delete_chat', 'delete_current_chat'):
|
||||||
dialogs.delete_chat(self, chat_name)
|
dialogs.delete_chat(self, chat_name)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user