Unverified Commit b2a541ac authored by Pol Dellaiera's avatar Pol Dellaiera Committed by GitHub
Browse files

Merge pull request #331947 from Aleksanaa/alpaca

alpaca: 1.0.1 -> 1.0.5
parents 81ef199f 648fefc4
Loading
Loading
Loading
Loading
+0 −26
Original line number Diff line number Diff line
diff --git a/src/alpaca.in b/src/alpaca.in
index cb883c8..a9822cc 100755
--- a/src/alpaca.in
+++ b/src/alpaca.in
@@ -35,7 +35,21 @@ locale.bindtextdomain('alpaca', localedir)
 locale.textdomain('alpaca')
 gettext.install('alpaca', localedir)
 
+# Use the right XDG paths outside flatpak
+def set_xdg_path(env, default):
+    app_id = "com.jeffser.Alpaca"
+    base = os.getenv(env) or os.path.expanduser(default)
+    path = os.path.join(base, app_id)
+    if not os.path.exists(path):
+        os.makedirs(path)
+    os.environ[env] = path
+    return
+
 if __name__ == '__main__':
+    set_xdg_path("XDG_CONFIG_HOME", "~/.config")
+    set_xdg_path("XDG_DATA_HOME", "~/.local/share")
+    set_xdg_path("XDG_CACHE_HOME", "~/.cache")
+
     import gi
 
     from gi.repository import Gio
+159 −0
Original line number Diff line number Diff line
diff --git a/src/internal.py b/src/internal.py
new file mode 100644
index 0000000..b41e415
--- /dev/null
+++ b/src/internal.py
@@ -0,0 +1,22 @@
+import os
+
+app_id = "com.jeffser.Alpaca"
+
+in_flatpak = True if os.getenv("FLATPAK_ID") else False
+
+def get_xdg_home(env, default):
+    if in_flatpak:
+        return os.getenv(env)
+    else:
+        base = os.getenv(env) or os.path.expanduser(default)
+        path = os.path.join(base, app_id)
+        if not os.path.exists(path):
+            os.makedirs(path)
+        return path
+
+
+data_dir = get_xdg_home("XDG_DATA_HOME", "~/.local/share")
+config_dir = get_xdg_home("XDG_CONFIG_HOME", "~/.config")
+cache_dir = get_xdg_home("XDG_CACHE_HOME", "~/.cache")
+
+source_dir = os.path.abspath(os.path.dirname(__file__))
diff --git a/src/local_instance.py b/src/local_instance.py
index cb3ee51..1866f83 100644
--- a/src/local_instance.py
+++ b/src/local_instance.py
@@ -2,24 +2,24 @@
 import subprocess, os, threading
 from time import sleep
 from logging import getLogger
+from .internal import data_dir, cache_dir
 
 
 logger = getLogger(__name__)
 
 instance = None
 port = 11435
-data_dir = os.getenv("XDG_DATA_HOME")
 overrides = {}
 
 def start():
-    if not os.path.isdir(os.path.join(os.getenv("XDG_CACHE_HOME"), 'tmp/ollama')):
-        os.mkdir(os.path.join(os.getenv("XDG_CACHE_HOME"), 'tmp/ollama'))
+    if not os.path.isdir(os.path.join(cache_dir, 'tmp/ollama')):
+        os.mkdir(os.path.join(cache_dir, 'tmp/ollama'))
     global instance, overrides
     params = overrides.copy()
     params["OLLAMA_HOST"] = f"127.0.0.1:{port}" # You can't change this directly sorry :3
     params["HOME"] = data_dir
-    params["TMPDIR"] = os.path.join(os.getenv("XDG_CACHE_HOME"), 'tmp/ollama')
-    instance = subprocess.Popen(["/app/bin/ollama", "serve"], env={**os.environ, **params}, stderr=subprocess.PIPE, text=True)
+    params["TMPDIR"] = os.path.join(cache_dir, 'tmp/ollama')
+    instance = subprocess.Popen(["ollama", "serve"], env={**os.environ, **params}, stderr=subprocess.PIPE, text=True)
     logger.info("Starting Alpaca's Ollama instance...")
     logger.debug(params)
     sleep(1)
diff --git a/src/main.py b/src/main.py
index 278914f..eeb54cd 100644
--- a/src/main.py
+++ b/src/main.py
@@ -27,6 +27,7 @@ gi.require_version('Adw', '1')
 
 from gi.repository import Gtk, Gio, Adw, GLib
 from .window import AlpacaWindow
+from .internal import cache_dir, data_dir
 
 
 logger = logging.getLogger(__name__)
@@ -63,7 +64,7 @@ class AlpacaApplication(Adw.Application):
             issue_url='https://github.com/Jeffser/Alpaca/issues',
             license_type=3,
             website="https://jeffser.com/alpaca",
-            debug_info=open(os.path.join(os.getenv("XDG_DATA_HOME"), 'tmp.log'), 'r').read())
+            debug_info=open(os.path.join(data_dir, 'tmp.log'), 'r').read())
         about.present(parent=self.props.active_window)
 
     def create_action(self, name, callback, shortcuts=None):
@@ -75,16 +76,16 @@ class AlpacaApplication(Adw.Application):
 
 
 def main(version):
-    if os.path.isfile(os.path.join(os.getenv("XDG_DATA_HOME"), 'tmp.log')):
-        os.remove(os.path.join(os.getenv("XDG_DATA_HOME"), 'tmp.log'))
-    if os.path.isdir(os.path.join(os.getenv("XDG_CACHE_HOME"), 'tmp')):
-        os.system('rm -rf ' + os.path.join(os.getenv("XDG_CACHE_HOME"), "tmp/*"))
+    if os.path.isfile(os.path.join(data_dir, 'tmp.log')):
+        os.remove(os.path.join(data_dir, 'tmp.log'))
+    if os.path.isdir(os.path.join(cache_dir, 'tmp')):
+        os.system('rm -rf ' + os.path.join(cache_dir, "tmp/*"))
     else:
-        os.mkdir(os.path.join(os.getenv("XDG_CACHE_HOME"), 'tmp'))
+        os.mkdir(os.path.join(cache_dir, 'tmp'))
     logging.basicConfig(
         format="%(levelname)s\t[%(filename)s | %(funcName)s] %(message)s",
         level=logging.INFO,
-        handlers=[logging.FileHandler(filename=os.path.join(os.getenv("XDG_DATA_HOME"), 'tmp.log')), logging.StreamHandler(stream=sys.stdout)]
+        handlers=[logging.FileHandler(filename=os.path.join(data_dir, 'tmp.log')), logging.StreamHandler(stream=sys.stdout)]
     )
     app = AlpacaApplication(version)
     logger.info(f"Alpaca version: {app.version}")
diff --git a/src/meson.build b/src/meson.build
index 1781b7a..b212cbf 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -44,7 +44,8 @@ alpaca_sources = [
   'local_instance.py',
   'available_models.json',
   'available_models_descriptions.py',
-  'table_widget.py'
+  'table_widget.py',
+  'internal.py'
 ]
 
 install_data(alpaca_sources, install_dir: moduledir)
diff --git a/src/window.py b/src/window.py
index 0771919..0f3b892 100644
--- a/src/window.py
+++ b/src/window.py
@@ -29,20 +29,21 @@ from pypdf import PdfReader
 from datetime import datetime
 from . import dialogs, local_instance, connection_handler, available_models_descriptions
 from .table_widget import TableWidget
+from .internal import config_dir, data_dir, cache_dir, source_dir
 
 logger = logging.getLogger(__name__)
 
 
 @Gtk.Template(resource_path='/com/jeffser/Alpaca/window.ui')
 class AlpacaWindow(Adw.ApplicationWindow):
-    config_dir = os.getenv("XDG_CONFIG_HOME")
-    data_dir = os.getenv("XDG_DATA_HOME")
     app_dir = os.getenv("FLATPAK_DEST")
-    cache_dir = os.getenv("XDG_CACHE_HOME")
+    config_dir = config_dir
+    data_dir = data_dir
+    cache_dir = cache_dir
 
     __gtype_name__ = 'AlpacaWindow'
 
-    localedir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'locale')
+    localedir = os.path.join(source_dir, 'locale')
 
     gettext.bindtextdomain('com.jeffser.Alpaca', localedir)
     gettext.textdomain('com.jeffser.Alpaca')
@@ -1602,7 +1603,7 @@ Generate a title following these rules:
     def __init__(self, **kwargs):
         super().__init__(**kwargs)
         GtkSource.init()
-        with open('/app/share/Alpaca/alpaca/available_models.json', 'r') as f:
+        with open(os.path.join(source_dir, 'available_models.json'), 'r') as f:
             self.available_models = json.load(f)
         if not os.path.exists(os.path.join(self.data_dir, "chats")):
             os.makedirs(os.path.join(self.data_dir, "chats"))
+4 −10
Original line number Diff line number Diff line
@@ -17,28 +17,22 @@

python3Packages.buildPythonApplication rec {
  pname = "alpaca";
  version = "1.0.1";
  version = "1.0.5";
  pyproject = false; # Built with meson

  src = fetchFromGitHub {
    owner = "Jeffser";
    repo = "Alpaca";
    rev = version;
    hash = "sha256-GxnYPnrjaJ47/i+pigw+on2dmbHwQSX+STasvqnAtuQ=";
    hash = "sha256-xNQLaMvZaJq7Bmz+c8OQhta3IdFXpVB2bSNwXCRj6rY=";
  };

  patches = [
    # Change the way XDG paths are handled so it makes sense outside of flatpak
    ./fix_xdg_path_flatpak.patch
    # https://github.com/Jeffser/Alpaca/pull/187
    ./flatpak_path_fixes.patch
  ];

  postPatch = ''
    substituteInPlace src/local_instance.py \
      --replace-fail '/app/bin/ollama' 'ollama'
    substituteInPlace src/window.py \
      --replace-fail '/app/share' "$out/share"
  '';

  nativeBuildInputs = [
    appstream
    meson