Files
PyLlama/chat.py
T

44 lines
1.3 KiB
Python

import gi
from gi.repository import GLib, Gtk, Gdk
import util
class ChatView(Gtk.ScrolledWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.cur_ai_response = None
self.listbox = Gtk.ListBox()
self.listbox.set_selection_mode(Gtk.SelectionMode.NONE)
self.listbox.set_focusable(True)
self.set_child(self.listbox)
def scroll_to_bottom(self, *args):
adj = self.get_vadjustment()
adj.set_value(adj.get_upper() - adj.get_page_size())
def start_response(self):
self.cur_ai_response = self.add_message(sender=False)
return self.cur_ai_response
def add_message(self, text="", sender=True):
label = Gtk.Label(selectable=True, wrap=True, xalign=1.0 if sender else 0.0)
label.set_text(text)
util.set_margin_all(label, 8)
row = Gtk.ListBoxRow()
row.set_child(label)
self.listbox.append(row)
GLib.idle_add(self.scroll_to_bottom)
return label
def add_response_part(self, part):
if self.cur_ai_response is None:
return
self.cur_ai_response.set_label(self.cur_ai_response.get_label() + part)
GLib.idle_add(self.scroll_to_bottom)