From daf04c5950b676f47a794300657f1d3d14c1a120 Mon Sep 17 00:00:00 2001 From: Ivan Kovnatsky <75213+ivankovnatsky@users.noreply.github.com> Date: Sat, 25 Jan 2025 01:54:49 +0200 Subject: [PATCH] ollama: add darwin support --- modules/services/ollama.nix | 17 +++++++++- tests/default.nix | 3 +- .../modules/services/ollama/darwin/basic.nix | 24 ++++++++++++++ .../services/ollama/darwin/default.nix | 1 + .../ollama/darwin/expected-agent.plist | 31 +++++++++++++++++++ .../services/ollama/{ => linux}/basic.nix | 0 .../services/ollama/{ => linux}/default.nix | 2 +- .../{ => linux}/set-environment-variables.nix | 0 8 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 tests/modules/services/ollama/darwin/basic.nix create mode 100644 tests/modules/services/ollama/darwin/default.nix create mode 100644 tests/modules/services/ollama/darwin/expected-agent.plist rename tests/modules/services/ollama/{ => linux}/basic.nix (100%) rename tests/modules/services/ollama/{ => linux}/default.nix (71%) rename tests/modules/services/ollama/{ => linux}/set-environment-variables.nix (100%) diff --git a/modules/services/ollama.nix b/modules/services/ollama.nix index 66e1e8377..0cb1b2eee 100644 --- a/modules/services/ollama.nix +++ b/modules/services/ollama.nix @@ -76,7 +76,7 @@ in { }; config = mkIf cfg.enable { - systemd.user.services.ollama = { + systemd.user.services.ollama = mkIf pkgs.stdenv.isLinux { Unit = { Description = "Server for local large language models"; After = [ "network.target" ]; @@ -92,6 +92,21 @@ in { Install = { WantedBy = [ "default.target" ]; }; }; + launchd.agents.ollama = mkIf pkgs.stdenv.isDarwin { + enable = true; + config = { + ProgramArguments = [ "${getExe ollamaPackage}" "serve" ]; + EnvironmentVariables = cfg.environmentVariables // { + OLLAMA_HOST = "${cfg.host}:${toString cfg.port}"; + }; + KeepAlive = { + Crashed = true; + SuccessfulExit = false; + }; + ProcessType = "Background"; + }; + }; + home.packages = [ ollamaPackage ]; }; } diff --git a/tests/default.nix b/tests/default.nix index b77c354c5..f7778e445 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -185,6 +185,7 @@ in import nmtSrc { ./modules/services/git-sync-darwin ./modules/services/imapnotify-darwin ./modules/services/nix-gc-darwin + ./modules/services/ollama/darwin ./modules/targets-darwin ] ++ lib.optionals isLinux [ ./modules/config/i18n @@ -270,7 +271,7 @@ in import nmtSrc { ./modules/services/mpd-mpris ./modules/services/mpdris2 ./modules/services/nix-gc - ./modules/services/ollama + ./modules/services/ollama/linux ./modules/services/osmscout-server ./modules/services/pantalaimon ./modules/services/parcellite diff --git a/tests/modules/services/ollama/darwin/basic.nix b/tests/modules/services/ollama/darwin/basic.nix new file mode 100644 index 000000000..b9203cc7e --- /dev/null +++ b/tests/modules/services/ollama/darwin/basic.nix @@ -0,0 +1,24 @@ +{ lib, pkgs, ... }: + +lib.mkMerge [ + { + services.ollama = { + enable = true; + host = "localhost"; + port = 11111; + environmentVariables = { + OLLAMA_LLM_LIBRARY = "cpu"; + HIP_VISIBLE_DEVICES = "0,1"; + }; + }; + + test.stubs.ollama = { }; + } + (lib.mkIf pkgs.stdenv.isDarwin { + nmt.script = '' + serviceFile=LaunchAgents/org.nix-community.home.ollama.plist + assertFileExists "$serviceFile" + assertFileContent "$serviceFile" ${./expected-agent.plist} + ''; + }) +] diff --git a/tests/modules/services/ollama/darwin/default.nix b/tests/modules/services/ollama/darwin/default.nix new file mode 100644 index 000000000..418446cd6 --- /dev/null +++ b/tests/modules/services/ollama/darwin/default.nix @@ -0,0 +1 @@ +{ ollama-darwin = ./basic.nix; } diff --git a/tests/modules/services/ollama/darwin/expected-agent.plist b/tests/modules/services/ollama/darwin/expected-agent.plist new file mode 100644 index 000000000..a159fd980 --- /dev/null +++ b/tests/modules/services/ollama/darwin/expected-agent.plist @@ -0,0 +1,31 @@ + + + + + EnvironmentVariables + + HIP_VISIBLE_DEVICES + 0,1 + OLLAMA_HOST + localhost:11111 + OLLAMA_LLM_LIBRARY + cpu + + KeepAlive + + Crashed + + SuccessfulExit + + + Label + org.nix-community.home.ollama + ProcessType + Background + ProgramArguments + + @ollama@/bin/ollama + serve + + + diff --git a/tests/modules/services/ollama/basic.nix b/tests/modules/services/ollama/linux/basic.nix similarity index 100% rename from tests/modules/services/ollama/basic.nix rename to tests/modules/services/ollama/linux/basic.nix diff --git a/tests/modules/services/ollama/default.nix b/tests/modules/services/ollama/linux/default.nix similarity index 71% rename from tests/modules/services/ollama/default.nix rename to tests/modules/services/ollama/linux/default.nix index 84ad2c99e..a0c82ae86 100644 --- a/tests/modules/services/ollama/default.nix +++ b/tests/modules/services/ollama/linux/default.nix @@ -1,4 +1,4 @@ { - ollama-basic = ./basic.nix; + ollama-linux = ./basic.nix; ollama-set-environment-variables = ./set-environment-variables.nix; } diff --git a/tests/modules/services/ollama/set-environment-variables.nix b/tests/modules/services/ollama/linux/set-environment-variables.nix similarity index 100% rename from tests/modules/services/ollama/set-environment-variables.nix rename to tests/modules/services/ollama/linux/set-environment-variables.nix