Imaginer/src/provider/base.py
2023-05-07 10:35:04 +02:00

81 lines
2.2 KiB
Python

from gettext import gettext as _
from gi.repository import Gtk, Adw
import json
class BavarderProvider:
name = None
slug = None
def __init__(self, win, app, *args, **kwargs):
self.win = win
self.banner = win.banner
self.bot_text_view = win.bot_text_view
self.app = app
self.chat = None
self.update_response = app.update_response
def ask(self, prompt):
raise NotImplementedError()
@property
def require_api_key(self):
raise NotImplementedError()
def preferences(self):
raise NotImplementedError()
def no_api_key(self, title=None):
if title:
self.win.banner.props.title = title
else:
self.win.banner.props.title = _(
"No API key provided, you can provide one in settings"
)
self.win.banner.props.button_label = _("Open settings")
self.win.banner.connect("button-clicked", self.app.on_preferences_action)
self.win.banner.set_revealed(True)
def no_connection(self):
self.win.banner.props.title = _("No network connection")
self.win.banner.props.button_label = ""
self.win.banner.set_revealed(True)
def hide_banner(self):
self.win.banner.set_revealed(False)
def about(self, *args):
raise NotImplementedError()
def no_preferences(self, win):
self.pref_win = win
self.expander = Adw.ExpanderRow()
self.expander.props.title = self.name
about_button = Gtk.Button()
about_button.set_label("About")
about_button.connect("clicked", self.about)
about_button.set_valign(Gtk.Align.CENTER)
self.expander.add_action(about_button) # TODO: in Adw 1.4, use add_suffix
self.no_pref_row = Adw.ActionRow()
self.no_pref_row.props.title = "No preferences available"
self.expander.add_row(self.no_pref_row)
return self.expander
def save(self):
return {}
def load(self, data):
raise NotImplementedError()
def chunk(self, prompt, n=4000):
if len(prompt) > n:
print("Chuncking prompt")
prompt = [(prompt[i : i + n]) for i in range(0, len(prompt), n)]
return prompt