Files
TheaninovOS/modules/nixos/usecases/localai.nix
T
2026-09-13 11:20:11 +02:00

114 lines
3.2 KiB
Nix

{
config,
lib,
pkgs,
username,
...
}:
with lib;
let
cfg = config.usecases.localai;
in
{
options.usecases.localai = {
enable = mkEnableOption "Enable local LLM services";
};
config = mkIf cfg.enable {
home-manager.users.${username}.home.packages = [
pkgs.llama-cpp-codacus
pkgs.opencode
pkgs.github-copilot-cli
];
services = {
llama-cpp = {
enable = true;
package = pkgs.llama-cpp-codacus;
settings = {
host = "127.0.0.1";
port = 9931;
models-max = 1;
models-preset = pkgs.writeText "presets.ini" (
pkgs.lib.generators.toINI { } {
/*
"Qwen3.6-35B-A3B" = {
#model = "/mnt/llms/Qwen3.6-35B-A3B/Qwen3.6-35B-A3B-UD-Q6_K.gguf";
model = "/mnt/llms/Qwen3.6-35B-A3B/Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf";
threads = 6; # 1 per real core
ctx-size = 131072; # 262144;
n-cpu-moe = 34;
n-gpu-layers = 999;
load-mode = "mlock";
#no-mmap = true;
#mlock = true;
jinja = true;
cache-type-k = "q8_0";
cache-type-v = "q8_0";
#cache-type-k = "turbo4";
#cache-type-v = "turbo3";
#temp = 1.0;
#top-p = 0.95;
#top-k = 20;
};
*/
"Qwen3.8-Flash" = {
model = "/mnt/llms/Qwen3.8-Flash/Qwen3.8-Flash-Next-UD-IQ3_XXS-00001-of-00003.gguf";
threads = 6; # 1 per real core
# threads-batch = 16;
parallel = 1;
n-gpu-layers = 99;
n-cpu-moe = 99;
load-mode = "mmap";
flash-attn = "on";
moe-cache-slots = 48;
spec-type = "draft-mtp";
spec-draft-model = "/mnt/llms/Qwen3.8-Flash/mtp-Qwen3.8-Flash-Next-shared-Q8_0.gguf";
spec-draft-n-max = 1;
spec-draft-ngl = 0;
cache-reuse = 256;
fit = "off";
no-sched-async-cpu = true;
cache-type-k = "q8_0";
cache-type-v = "q8_0";
ctx-size = 131072; # 32768;
batch-size = 2048;
ubatch-size = 512;
jinja = true;
};
}
);
};
};
/*
open-webui = {
enable = true;
port = 57461;
environment = {
ANONYMIZED_TELEMETRY = "False";
DO_NOT_TRACK = "True";
SCARF_NO_ANALYTICS = "True";
WEBUI_AUTH = "False";
};
};
*/
};
/*
virtualisation.oci-containers.containers.open-terminal =
let
xdg = config.home-manager.users.${username}.xdg;
in
{
podman.user = "${username}";
image = "ghcr.io/open-webui/open-terminal";
volumes = [ "${xdg.dataHome}/open-terminal:/home/user" ];
ports = [ "54183:8000" ];
extraOptions = [ "--env-file=${xdg.configHome}/open-terminal.env" ];
};
*/
};
}