From 539ba4aba9458cd1ad8368ba9e1f10f52eb9834d Mon Sep 17 00:00:00 2001 From: 0xmrtt <0xmrtt@proton.me> Date: Mon, 6 Apr 2026 09:52:11 +0200 Subject: [PATCH] incoming?? --- src/widgets/marketplace_item.blp | 14 ++++++++ src/widgets/marketplace_item.py | 57 ++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 src/widgets/marketplace_item.blp create mode 100644 src/widgets/marketplace_item.py diff --git a/src/widgets/marketplace_item.blp b/src/widgets/marketplace_item.blp new file mode 100644 index 0000000..c47d0b5 --- /dev/null +++ b/src/widgets/marketplace_item.blp @@ -0,0 +1,14 @@ +using Gtk 4.0; +using Adw 1; + +template $MarketplaceItem : Adw.ActionRow { + activatable-widget: download; + [suffix] + Button download { + styles ["flat"] + valign: center; + icon-name: "folder-download-symbolic"; + tooltip-text: _("Download Model"); + clicked => $on_download_button_clicked(); + } +} diff --git a/src/widgets/marketplace_item.py b/src/widgets/marketplace_item.py new file mode 100644 index 0000000..d291bb2 --- /dev/null +++ b/src/widgets/marketplace_item.py @@ -0,0 +1,57 @@ +from gi.repository import Gtk, Adw, GLib + +from bavarder.constants import app_id, rootdir +from bavarder.threading import KillableThread + + +@Gtk.Template(resource_path=f"{rootdir}/ui/marketplace_item.ui") +class MarketplaceItem(Adw.ActionRow): + __gtype_name__ = "MarketplaceItem" + + def __init__(self, app, window, model_info, **kwargs): + super().__init__(**kwargs) + self.app = app + self.window = window + self.model_info = model_info + + self.setup() + + def setup(self): + self.set_title(self.model_info.get("name", "")) + self.set_subtitle(self.model_info.get("id", "")) + + @Gtk.Template.Callback() + def on_download_button_clicked(self, widget, *args): + def thread_run(): + self.app.action_running_in_background = True + + toast = Adw.Toast() + toast.set_timeout(0) + toast.set_title(_("Downloading model %s" % self.model_info.get("name"))) + self.window.add_toast(toast) + + model_id = self.model_info.get("id") + from huggingface_hub import hf_hub_download + model_file = hf_hub_download( + repo_id=model_id, + filename="*.litertlm", + cache_dir=self.app.user_cache_dir + ) + + self.app.data["providers"]["litert-lm"]["data"]["model_path"] = model_file + self.app.data["providers"]["litert-lm"]["data"]["hf_model"] = model_id + GLib.idle_add(cleanup, toast, model_file) + + def cleanup(toast, model_file): + t.join() + + toast.dismiss() + + self.app.action_running_in_background = False + + toast = Adw.Toast() + toast.set_title(_("Model %s downloaded!" % self.model_info.get("name"))) + self.window.add_toast(toast) + + t = KillableThread(target=thread_run) + t.start()