feat: add aihorde
Build / Flatpak (x86_64) (push) Has been cancelled
Details
Build / Flatpak (x86_64) (push) Has been cancelled
Details
This commit is contained in:
parent
90ef5a9c14
commit
1f45e14990
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
|
||||
<path style="fill:#dfdfdf" d="M 12.279,3.3705 6,10.561 3.75,8.3105 C 3.2882,7.8608 2.69,7.9405 2.31,8.3105 1.94,8.6905 1.8543,9.2947 2.31,9.7505 L 6.09,13.5 13.779,4.6905 C 14.538,3.8206 13.215,2.2986 12.279,3.3705 Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 306 B |
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-08-21 12:44+0200\n"
|
||||
"POT-Creation-Date: 2023-08-22 17:12+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -37,11 +37,11 @@ msgid ""
|
|||
"help/huggingface/)"
|
||||
msgstr ""
|
||||
|
||||
#: src/providers/hfbasechat.py:49
|
||||
#: src/providers/hfbasechat.py:50
|
||||
msgid "Sorry, I don't know what to say!"
|
||||
msgstr ""
|
||||
|
||||
#: src/providers/hfbasechat.py:57
|
||||
#: src/providers/hfbasechat.py:58
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
|
@ -106,7 +106,7 @@ msgid "Cancel"
|
|||
msgstr ""
|
||||
|
||||
#: src/views/preferences_window.py:78 src/views/window.py:218
|
||||
#: src/widgets/thread_item.blp:56 src/widgets/thread_item.py:108
|
||||
#: src/widgets/thread_item.blp:58 src/widgets/thread_item.py:108
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
|
@ -398,7 +398,7 @@ msgstr ""
|
|||
msgid "Edit Title"
|
||||
msgstr ""
|
||||
|
||||
#: src/widgets/thread_item.blp:61
|
||||
#: src/widgets/thread_item.blp:63
|
||||
msgid "Star"
|
||||
msgstr ""
|
||||
|
||||
|
@ -418,16 +418,16 @@ msgstr ""
|
|||
msgid "Thread Deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/main.py:261
|
||||
#: src/main.py:265
|
||||
msgid ""
|
||||
"Please download a model from Preferences by clicking on the Dot Menu at the "
|
||||
"top!"
|
||||
msgstr ""
|
||||
|
||||
#: src/main.py:265
|
||||
#: src/main.py:269
|
||||
msgid "Hello, I am Bavarder, a Chit-Chat AI"
|
||||
msgstr ""
|
||||
|
||||
#: src/main.py:288
|
||||
#: src/main.py:292
|
||||
msgid "Please enable a provider from the Dot Menu"
|
||||
msgstr ""
|
||||
|
|
|
@ -8,6 +8,7 @@ fa
|
|||
fi
|
||||
fr
|
||||
gl
|
||||
he
|
||||
hu
|
||||
it
|
||||
nl
|
||||
|
@ -21,4 +22,3 @@ tr
|
|||
uk
|
||||
zh_Hans
|
||||
zh_Hant
|
||||
he
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
<file preprocess="xml-stripblanks" alias="cloud-filled-symbolic.svg">../data/icons/hicolor/scalable/actions/cloud-filled-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks" alias="document-edit-symbolic.svg">../data/icons/hicolor/scalable/actions/document-edit-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks" alias="go-bottom-symbolic.svg">../data/icons/hicolor/scalable/actions/go-bottom-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks" alias="object-select-symbolic.svg">../data/icons/hicolor/scalable/actions/object-select-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks" alias="paper-plane-symbolic.svg">../data/icons/hicolor/scalable/actions/paper-plane-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks" alias="settings-symbolic.svg">../data/icons/hicolor/scalable/actions/settings-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks" alias="terminal-symbolic.svg">../data/icons/hicolor/scalable/actions/terminal-symbolic.svg</file>
|
||||
|
|
10
src/main.py
10
src/main.py
|
@ -84,7 +84,11 @@ class BavarderApplication(Adw.Application):
|
|||
|
||||
self.data = {
|
||||
"chats": [],
|
||||
"providers": {},
|
||||
"providers": {
|
||||
"google-flan-t5-xxl": {"enabled": True, "data": {}},
|
||||
"gpt-2": {"enabled": True, "data": {}},
|
||||
|
||||
},
|
||||
"models": {}
|
||||
}
|
||||
|
||||
|
@ -216,8 +220,8 @@ class BavarderApplication(Adw.Application):
|
|||
|
||||
def on_preferences_action(self, widget, _):
|
||||
"""Callback for the app.preferences action."""
|
||||
preferences = PreferencesWindow(self.win)
|
||||
preferences.present()
|
||||
self.preferences_window = PreferencesWindow(self.win)
|
||||
self.preferences_window.present()
|
||||
|
||||
|
||||
def create_action(self, name, callback, shortcuts=None):
|
||||
|
|
|
@ -9,8 +9,10 @@ from .gpt2 import GPT2Provider
|
|||
from .openassistantsft1pythia12b import HuggingFaceOpenAssistantSFT1PythiaProvider
|
||||
from .robertasquad2 import RobertaSquad2Provider
|
||||
from .local import LocalProvider
|
||||
from .aihorde import AIHordeProvider
|
||||
|
||||
PROVIDERS = {
|
||||
AIHordeProvider,
|
||||
BlenderBotProvider,
|
||||
CatGPTProvider,
|
||||
DialoGPTProvider,
|
||||
|
|
|
@ -0,0 +1,154 @@
|
|||
from .base import BaseProvider
|
||||
|
||||
import json
|
||||
import requests
|
||||
import time
|
||||
|
||||
from gi.repository import Adw, Gtk
|
||||
|
||||
class AIHordeProvider(BaseProvider):
|
||||
name = "AI Horde"
|
||||
|
||||
ASYNC_URL = "https://stablehorde.net/api/v2/generate/text/async"
|
||||
STATUS_URL = "https://stablehorde.net/api/v2/generate/text/status/"
|
||||
API_KEY = "0000000000"
|
||||
model = "PygmalionAI/pygmalion-7b"
|
||||
|
||||
|
||||
def ask(self, prompt, chat, **kwargs):
|
||||
self.API_KEY = self.data.get("api_key", "0000000000")
|
||||
|
||||
chat = chat["content"]
|
||||
|
||||
self.headers = {
|
||||
"Client-Agent": "bavarder:1:linux",
|
||||
"apikey": self.API_KEY,
|
||||
}
|
||||
|
||||
data = {
|
||||
"prompt": prompt,
|
||||
"models": [
|
||||
self.model
|
||||
]
|
||||
}
|
||||
|
||||
r = requests.post(self.ASYNC_URL, json=data, headers=self.headers)
|
||||
|
||||
if r.status_code == 202:
|
||||
rid = r.json()["id"]
|
||||
else:
|
||||
print(r.json())
|
||||
print(r.status_code)
|
||||
return _("I'm sorry, I don't know what to say!")
|
||||
|
||||
|
||||
# do the request every seconds and check if it's finished
|
||||
while True:
|
||||
r = self.check_status(rid)
|
||||
if r:
|
||||
return r
|
||||
else:
|
||||
time.sleep(1)
|
||||
return _("I'm sorry, I don't know what to say!")
|
||||
|
||||
def check_status(self, rid):
|
||||
r = requests.get(self.STATUS_URL + rid)
|
||||
rj = r.json()
|
||||
|
||||
if r.status_code == 200:
|
||||
print(rj)
|
||||
if rj["done"]:
|
||||
return r.json()["generations"][0]["text"]
|
||||
return None
|
||||
|
||||
def get_settings_rows(self):
|
||||
self.rows = []
|
||||
|
||||
self.api_row = Adw.PasswordEntryRow()
|
||||
self.api_row.connect("apply", self.on_apply)
|
||||
self.api_row.props.text = self.data.get('api_key') or self.API_KEY
|
||||
self.api_row.props.title = _("API Key")
|
||||
self.api_row.set_show_apply_button(True)
|
||||
self.api_row.add_suffix(self.how_to_get_a_token())
|
||||
self.rows.append(self.api_row)
|
||||
|
||||
r = requests.get("https://stablehorde.net/api/v2/status/models?type=text")
|
||||
|
||||
if r.status_code != 200:
|
||||
print(r.json())
|
||||
return self.rows
|
||||
else:
|
||||
rj = r.json()
|
||||
|
||||
models_row = Adw.ActionRow()
|
||||
models_row.set_title(_("Models"))
|
||||
models_row.set_subtitle(_("Select a model to use"))
|
||||
|
||||
go_to_sub_button = Gtk.Button.new_from_icon_name("go-next-symbolic")
|
||||
go_to_sub_button.set_valign(Gtk.Align.CENTER)
|
||||
go_to_sub_button.set_tooltip_text(_("Go to the models page"))
|
||||
go_to_sub_button.add_css_class("flat")
|
||||
go_to_sub_button.connect("clicked", self.open_subpage)
|
||||
|
||||
models_row.add_suffix(go_to_sub_button)
|
||||
|
||||
self.page = Adw.NavigationPage()
|
||||
|
||||
prefpage = Adw.PreferencesPage()
|
||||
|
||||
group = Adw.PreferencesGroup()
|
||||
|
||||
self.selected_row = Adw.ActionRow()
|
||||
self.selected_row.set_title(_("Selected model"))
|
||||
if self.model:
|
||||
self.selected_row.set_subtitle(self.model)
|
||||
else:
|
||||
self.selected_row.set_subtitle(_("No model selected"))
|
||||
|
||||
group.add(self.selected_row)
|
||||
|
||||
for model in rj:
|
||||
mr = Adw.ActionRow()
|
||||
mr.props.title = model["name"]
|
||||
mr.props.subtitle = f"Performance {model['performance']} - Jobs {model['jobs']} - Queued {model['queued']}"
|
||||
|
||||
apply_button = Gtk.Button.new_from_icon_name("object-select-symbolic")
|
||||
apply_button.connect("clicked", self.on_apply_model, model["name"])
|
||||
apply_button.set_valign(Gtk.Align.CENTER)
|
||||
apply_button.set_tooltip_text(_("Select this model"))
|
||||
apply_button.add_css_class("flat")
|
||||
|
||||
mr.add_suffix(apply_button)
|
||||
|
||||
group.add(mr)
|
||||
|
||||
|
||||
toolbar = Adw.ToolbarView()
|
||||
header = Adw.HeaderBar()
|
||||
label = Gtk.Label()
|
||||
label.set_label(_("Models"))
|
||||
header.set_title_widget(label)
|
||||
toolbar.add_top_bar(header)
|
||||
prefpage.add(group)
|
||||
toolbar.set_content(prefpage)
|
||||
self.page.set_child(toolbar)
|
||||
|
||||
|
||||
|
||||
self.rows.append(models_row)
|
||||
|
||||
return self.rows
|
||||
|
||||
def open_subpage(self, widget):
|
||||
self.app.preferences_window.push_subpage(self.page)
|
||||
|
||||
def on_apply(self, widget):
|
||||
self.API_KEY = self.api_row.get_text()
|
||||
self.data["api_key"] = self.API_KEY
|
||||
|
||||
def on_apply_model(self, widget, name):
|
||||
self.model = name
|
||||
if self.model:
|
||||
self.selected_row.set_subtitle(self.model)
|
||||
else:
|
||||
self.selected_row.set_subtitle(_("No model selected"))
|
|
@ -46,6 +46,7 @@ class BaseHFChatProvider(BaseProvider):
|
|||
if 'generated_text' in output[0]:
|
||||
return output[0]['generated_text']
|
||||
else:
|
||||
print(output)
|
||||
return _("Sorry, I don't know what to say!")
|
||||
|
||||
def get_settings_rows(self):
|
||||
|
|
|
@ -2,6 +2,7 @@ providers_dir = join_paths(MODULE_DIR, 'providers')
|
|||
|
||||
providers_sources = [
|
||||
'__init__.py',
|
||||
'aihorde.py',
|
||||
'base.py',
|
||||
'blenderbot.py',
|
||||
'catgpt.py',
|
||||
|
|
Loading…
Reference in New Issue