From 6786cc9092eea9684d9f45657e38d05bdf6356b5 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Thu, 19 Sep 2024 10:21:06 -0400 Subject: [PATCH] gpt4all: bleeding edge --- nix/etcnixos/flake.lock | 12 +- nix/home-manager/flake.lock | 12 +- .../gpt4all-HEAD-embeddings-model.patch | 53 ++++++ nix/home-manager/gui.nix | 164 +++++++++++------- 4 files changed, 163 insertions(+), 78 deletions(-) create mode 100644 nix/home-manager/gpt4all-HEAD-embeddings-model.patch diff --git a/nix/etcnixos/flake.lock b/nix/etcnixos/flake.lock index fbcf90e..af1952c 100644 --- a/nix/etcnixos/flake.lock +++ b/nix/etcnixos/flake.lock @@ -316,11 +316,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1726650330, - "narHash": "sha256-UbHzmaOQ18O/kCizipU70N0UQVFIfv8AiFKXw07oZ9Y=", + "lastModified": 1726724509, + "narHash": "sha256-sVeAM1tgVi52S1e29fFBTPUAFSzgQwgLon3CrztXGm8=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "abb448608a56a60075468e90d8acec2a7cb689b1", + "rev": "10d5e0ecc32984c1bf1a9a46586be3451c42fd94", "type": "github" }, "original": { @@ -332,11 +332,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1726668270, - "narHash": "sha256-+N9ASvTufNJ6VAkkvSgXMtd+0RrzjXF83AMyamQlX9Y=", + "lastModified": 1726751368, + "narHash": "sha256-UaLaS+LAGslTFnQOZs16Y90ybdA6rXoznqu2HvO5ykU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "50470da36ef2c4448b23285257de4be40acd5c7c", + "rev": "fa09c7cca3aa8685ca69198b4510d54ef1fa7f73", "type": "github" }, "original": { diff --git a/nix/home-manager/flake.lock b/nix/home-manager/flake.lock index 33e7134..282b388 100644 --- a/nix/home-manager/flake.lock +++ b/nix/home-manager/flake.lock @@ -33,11 +33,11 @@ ] }, "locked": { - "lastModified": 1726574742, - "narHash": "sha256-eWANP6s59C3tAMrExHwL7Sap51XUz/0f1cfGysXGnxA=", + "lastModified": 1726674526, + "narHash": "sha256-eKAUZRSynuVmNxCmyj4X3TrpI7uOggP+WNd4r1wnhSM=", "owner": "orhun", "repo": "binsider", - "rev": "31797519bd6ff5df0a4d9d530a25411597ca2915", + "rev": "fd2f7d2b46b34916009040d78fd6b170728d1338", "type": "github" }, "original": { @@ -201,11 +201,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1726669401, - "narHash": "sha256-HuyEQH0VI3m5DlCNbDafhBaOOBZTYmuTiikqr/gbNO0=", + "lastModified": 1726701516, + "narHash": "sha256-0xr+2k66e5g+SPXgHceaFZJlqq9kkAbahHE3vdYVZ3I=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8f86e59bbb9ea7447f3aff57d67444cd1113e646", + "rev": "db8da26fb9e7a031f2882c14d86e705b853e6104", "type": "github" }, "original": { diff --git a/nix/home-manager/gpt4all-HEAD-embeddings-model.patch b/nix/home-manager/gpt4all-HEAD-embeddings-model.patch new file mode 100644 index 0000000..fb15635 --- /dev/null +++ b/nix/home-manager/gpt4all-HEAD-embeddings-model.patch @@ -0,0 +1,53 @@ +commit 425b33877c819dd88f3692aae37452c767371f6b +Author: Simon Gardling +Date: Thu Sep 19 10:00:39 2024 -0400 + + use locally downloaded embeddings + +diff --git a/gpt4all-chat/CMakeLists.txt b/gpt4all-chat/CMakeLists.txt +index 900307ae..802fc31a 100644 +--- a//CMakeLists.txt ++++ b/CMakeLists.txt +@@ -120,6 +120,7 @@ elseif (APPLE) + endif() + + # Embedding model ++#[[ + set(LOCAL_EMBEDDING_MODEL "nomic-embed-text-v1.5.f16.gguf") + set(LOCAL_EMBEDDING_MODEL_MD5 "a5401e7f7e46ed9fcaed5b60a281d547") + set(LOCAL_EMBEDDING_MODEL_PATH "${CMAKE_BINARY_DIR}/resources/${LOCAL_EMBEDDING_MODEL}") +@@ -134,6 +135,7 @@ message(STATUS "Embedding model downloaded to ${LOCAL_EMBEDDING_MODEL_PATH}") + if (APPLE) + list(APPEND CHAT_EXE_RESOURCES "${LOCAL_EMBEDDING_MODEL_PATH}") + endif() ++]] + + set(QAPPLICATION_CLASS QGuiApplication) + add_subdirectory(deps/SingleApplication) +@@ -348,11 +350,13 @@ if (LLMODEL_CUDA) + endif() + endif() + ++#[[ + if (NOT APPLE) + install(FILES "${LOCAL_EMBEDDING_MODEL_PATH}" + DESTINATION resources + COMPONENT ${COMPONENT_NAME_MAIN}) + endif() ++]] + + set(CPACK_GENERATOR "IFW") + set(CPACK_VERBATIM_VARIABLES YES) +diff --git a/gpt4all-chat/src/embllm.cpp b/gpt4all-chat/src/embllm.cpp +index 81b1e9e1..e3266cc7 100644 +--- a/src/embllm.cpp ++++ b/src/embllm.cpp +@@ -84,7 +84,7 @@ bool EmbeddingLLMWorker::loadModel() + + QString filePath = embPathFmt.arg(QCoreApplication::applicationDirPath(), LOCAL_EMBEDDING_MODEL); + if (!QFileInfo::exists(filePath)) { +- qWarning() << "embllm WARNING: Local embedding model not found"; ++ qWarning() << "embllm WARNING: Local embedding model not found: " << filePath; + return false; + } + diff --git a/nix/home-manager/gui.nix b/nix/home-manager/gui.nix index cfcec76..835ed91 100644 --- a/nix/home-manager/gui.nix +++ b/nix/home-manager/gui.nix @@ -17,96 +17,128 @@ "factorio-alpha" ]; - home.packages = with pkgs; [ - #calculator - gnome-calculator + home.packages = + let + #stolen from: https://stackoverflow.com/a/42398526 + optimizeWithFlags = + pkg: flags: + pkgs.lib.overrideDerivation pkg ( + old: + let + newflags = pkgs.lib.foldl' (acc: x: "${acc} ${x}") "" flags; + oldflags = if (pkgs.lib.hasAttr "NIX_CFLAGS_COMPILE" old) then "${old.NIX_CFLAGS_COMPILE}" else ""; + in + { + NIX_CFLAGS_COMPILE = "${oldflags} ${newflags}"; + } + ); + in + with pkgs; + [ + #calculator + gnome-calculator - #productivity stuff - libreoffice - hunspell # spellcheck - hunspellDicts.en_US # spellcheck dictionary + #productivity stuff + libreoffice + hunspell # spellcheck + hunspellDicts.en_US # spellcheck dictionary - #video and audio downloading - parabolic + #video and audio downloading + parabolic - #soulseek client - nicotine-plus + #soulseek client + nicotine-plus - #dark web browsing deep web browsing - tor-browser + #dark web browsing deep web browsing + tor-browser - #audio editing - audacity + #audio editing + audacity - #fonts - noto-fonts - noto-fonts-emoji - liberation_ttf - nerdfonts - jetbrains-mono + #fonts + noto-fonts + noto-fonts-emoji + liberation_ttf + nerdfonts + jetbrains-mono - #for ebook reading - foliate + #for ebook reading + foliate - #audio mixer (pavucontrol but for pipewire) - pwvucontrol + #audio mixer (pavucontrol but for pipewire) + pwvucontrol - #minecraft launcher - prismlauncher + #minecraft launcher + prismlauncher - mpv - mumble - system76-keyboard-configurator - mission-center + mpv + mumble + system76-keyboard-configurator + mission-center - #jellyfin - finamp # music player - delfin # jellyfin client + #jellyfin + finamp # music player + delfin # jellyfin client - signal-desktop + signal-desktop - #accounting - gnucash + #accounting + gnucash - imagemagick - inkscape - nomacs + imagemagick + inkscape + nomacs - nautilus + nautilus - darktable + lrcget - lrcget + #openstreetmap contributing + josm - #openstreetmap contributing - josm + easyeffects + gparted - easyeffects - gparted + #small nicities + wl-clipboard # wl-copy & wl-paste + libnotify # notifications library + xdg-utils # xdg utils - gpt4all + gnome-disk-utility - #small nicities - wl-clipboard # wl-copy & wl-paste - libnotify # notifications library - xdg-utils # xdg utils + puddletag - gnome-disk-utility + inputs.zen-browser.packages."${pkgs.system}".specific - puddletag + (factorio.override ( + let + data = import ./secrets/factorio.nix; + in + { + username = data.username; + token = data.token; + } + )) - inputs.zen-browser.packages."${pkgs.system}".specific - - (factorio.override ( - let - data = import ./secrets/factorio.nix; - in - { - username = data.username; - token = data.token; - } - )) - ]; + (optimizeWithFlags + (pkgs.gpt4all.overrideAttrs { + src = pkgs.fetchFromGitHub { + fetchSubmodules = true; + owner = "nomic-ai"; + repo = "gpt4all"; + rev = "HEAD"; + sha256 = "S8yWNjylDaXbOviUd7Nhk7mfT0jjBsZq7XAGX38USpc="; + }; + patches = [ ./gpt4all-HEAD-embeddings-model.patch ]; + }) + [ + "-Ofast" + "-march=native" + "-mtune=native" + "-fno-finite-math-only" # https://github.com/ggerganov/llama.cpp/pull/7154#issuecomment-2143844461 + ] + ) + ]; # make chromium-based stuff use wayland home.file.".config/chromium-flags.conf".text = "--ozone-platform-hint=auto";