diff --git a/doc/release-notes/rl-2511.section.md b/doc/release-notes/rl-2511.section.md index 56f7b45ace74..d029662c81e2 100644 --- a/doc/release-notes/rl-2511.section.md +++ b/doc/release-notes/rl-2511.section.md @@ -62,6 +62,8 @@ - NixOS display manager modules now strictly use tty1, where many of them previously used tty7. Options to configure display managers' VT have been dropped. A configuration with a display manager enabled will not start `getty@tty1.service`, even if the system is forced to boot into `multi-user.target` instead of `graphical.target`. +- [private-gpt](https://github.com/zylon-ai/private-gpt) service has been removed by lack of maintenance upstream. + ## Other Notable Changes {#sec-nixpkgs-release-25.11-notable-changes} diff --git a/nixos/doc/manual/release-notes/rl-2405.section.md b/nixos/doc/manual/release-notes/rl-2405.section.md index 5b959dafacd1..1cbf71a7aad8 100644 --- a/nixos/doc/manual/release-notes/rl-2405.section.md +++ b/nixos/doc/manual/release-notes/rl-2405.section.md @@ -158,7 +158,7 @@ The pre-existing `services.ankisyncd` has been marked deprecated and will be dro - [pretalx](https://github.com/pretalx/pretalx), a conference planning tool. Available as [services.pretalx](#opt-services.pretalx.enable). -- [private-gpt](https://github.com/zylon-ai/private-gpt), a service to interact with your documents using the power of LLMs, 100% privately, no data leaks. Available as [services.private-gpt](#opt-services.private-gpt.enable). +- [private-gpt](https://github.com/zylon-ai/private-gpt), a service to interact with your documents using the power of LLMs, 100% privately, no data leaks. - [Prometheus DNSSEC Exporter](https://github.com/chrj/prometheus-dnssec-exporter): check for validity and expiration in DNSSEC signatures and expose metrics for Prometheus. Available as [services.prometheus.exporters.dnssec](#opt-services.prometheus.exporters.dnssec.enable). diff --git a/nixos/doc/manual/release-notes/rl-2511.section.md b/nixos/doc/manual/release-notes/rl-2511.section.md index 4323a34ac97f..eefc6d7f4cdd 100644 --- a/nixos/doc/manual/release-notes/rl-2511.section.md +++ b/nixos/doc/manual/release-notes/rl-2511.section.md @@ -131,6 +131,8 @@ - The `wstunnel` module was converted to RFC42-style settings, you will need to update your NixOS config if you make use of this module. +- [private-gpt](https://github.com/zylon-ai/private-gpt) service has been removed by lack of maintenance upstream. + ## Other Notable Changes {#sec-release-25.11-notable-changes} diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 0d91b467bff9..92899fd6115f 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -897,7 +897,6 @@ ./services/misc/polaris.nix ./services/misc/portunus.nix ./services/misc/preload.nix - ./services/misc/private-gpt.nix ./services/misc/pufferpanel.nix ./services/misc/pykms.nix ./services/misc/radicle.nix diff --git a/nixos/modules/rename.nix b/nixos/modules/rename.nix index 6d24b4fc0616..8ab897ecba56 100644 --- a/nixos/modules/rename.nix +++ b/nixos/modules/rename.nix @@ -348,7 +348,9 @@ in The signald project is unmaintained and has long been incompatible with the official Signal servers. '') - + (mkRemovedOptionModule [ "services" "private-gpt" ] '' + The private-gpt package and the corresponding module have been removed due to being broken and unmaintained. + '') # Do NOT add any option renames here, see top of the file ]; } diff --git a/nixos/modules/services/misc/private-gpt.nix b/nixos/modules/services/misc/private-gpt.nix deleted file mode 100644 index e7974f93d66a..000000000000 --- a/nixos/modules/services/misc/private-gpt.nix +++ /dev/null @@ -1,122 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - inherit (lib) types; - - format = pkgs.formats.yaml { }; - cfg = config.services.private-gpt; -in -{ - options = { - services.private-gpt = { - enable = lib.mkEnableOption "private-gpt for local large language models"; - package = lib.mkPackageOption pkgs "private-gpt" { }; - - stateDir = lib.mkOption { - type = types.path; - default = "/var/lib/private-gpt"; - description = "State directory of private-gpt."; - }; - - settings = lib.mkOption { - type = format.type; - default = { - llm = { - mode = "ollama"; - tokenizer = ""; - }; - embedding = { - mode = "ollama"; - }; - ollama = { - llm_model = "llama3"; - embedding_model = "nomic-embed-text"; - api_base = "http://localhost:11434"; - embedding_api_base = "http://localhost:11434"; - keep_alive = "5m"; - tfs_z = 1; - top_k = 40; - top_p = 0.9; - repeat_last_n = 64; - repeat_penalty = 1.2; - request_timeout = 120; - }; - vectorstore = { - database = "qdrant"; - }; - qdrant = { - path = "/var/lib/private-gpt/vectorstore/qdrant"; - }; - data = { - local_data_folder = "/var/lib/private-gpt"; - }; - openai = { }; - azopenai = { }; - }; - description = '' - settings-local.yaml for private-gpt - ''; - }; - }; - }; - - config = lib.mkIf cfg.enable { - systemd.services.private-gpt = { - description = "Interact with your documents using the power of GPT, 100% privately, no data leaks"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - - preStart = - let - config = format.generate "settings-local.yaml" (cfg.settings // { server.env_name = "local"; }); - in - '' - mkdir -p ${cfg.stateDir}/{settings,huggingface,matplotlib,tiktoken_cache} - cp ${cfg.package.cl100k_base.tiktoken} ${cfg.stateDir}/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 - cp ${pkgs.python3Packages.private-gpt}/${pkgs.python3.sitePackages}/private_gpt/settings.yaml ${cfg.stateDir}/settings/settings.yaml - cp "${config}" "${cfg.stateDir}/settings/settings-local.yaml" - chmod 600 "${cfg.stateDir}/settings/settings-local.yaml" - ''; - - environment = { - PGPT_PROFILES = "local"; - PGPT_SETTINGS_FOLDER = "${cfg.stateDir}/settings"; - HF_HOME = "${cfg.stateDir}/huggingface"; - TRANSFORMERS_OFFLINE = "1"; - HF_DATASETS_OFFLINE = "1"; - MPLCONFIGDIR = "${cfg.stateDir}/matplotlib"; - }; - - serviceConfig = { - ExecStart = lib.getExe cfg.package; - WorkingDirectory = cfg.stateDir; - StateDirectory = "private-gpt"; - RuntimeDirectory = "private-gpt"; - RuntimeDirectoryMode = "0755"; - PrivateTmp = true; - DynamicUser = true; - DevicePolicy = "closed"; - LockPersonality = true; - MemoryDenyWriteExecute = true; - PrivateUsers = true; - ProtectHome = true; - ProtectHostname = true; - ProtectKernelLogs = true; - ProtectKernelModules = true; - ProtectKernelTunables = true; - ProtectControlGroups = true; - ProcSubset = "pid"; - RestrictNamespaces = true; - RestrictRealtime = true; - SystemCallArchitectures = "native"; - UMask = "0077"; - }; - }; - }; - - meta.maintainers = [ ]; -} diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 652e0fd503e9..a01b8dc1c50c 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -1226,7 +1226,6 @@ in _module.args.socket = false; _module.args.listenTcp = false; }; - private-gpt = runTest ./private-gpt.nix; privatebin = runTest ./privatebin.nix; privoxy = runTest ./privoxy.nix; prometheus = import ./prometheus { inherit runTest; }; diff --git a/nixos/tests/private-gpt.nix b/nixos/tests/private-gpt.nix deleted file mode 100644 index f5c005165ab1..000000000000 --- a/nixos/tests/private-gpt.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ pkgs, lib, ... }: -let - mainPort = "8001"; -in -{ - name = "private-gpt"; - meta = with lib.maintainers; { - maintainers = [ ]; - }; - - nodes = { - machine = - { ... }: - { - services.private-gpt = { - enable = true; - }; - }; - }; - - testScript = '' - machine.start() - - machine.wait_for_unit("private-gpt.service") - machine.wait_for_open_port(${mainPort}) - - machine.succeed("curl http://127.0.0.1:${mainPort}") - ''; -}