From 4bfaeecd660880a018b5715f541ae1eb877f5d4c Mon Sep 17 00:00:00 2001 From: Natasha Moongrave Date: Mon, 1 Jun 2026 19:24:45 +0200 Subject: Added a local ai stack to herra --- hosts/herra/ai.nix | 51 +++++++++++++++++++++++++++++++++++++++++++ hosts/herra/arion-compose.nix | 50 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 hosts/herra/ai.nix create mode 100644 hosts/herra/arion-compose.nix (limited to 'hosts/herra') diff --git a/hosts/herra/ai.nix b/hosts/herra/ai.nix new file mode 100644 index 0000000..9ca7632 --- /dev/null +++ b/hosts/herra/ai.nix @@ -0,0 +1,51 @@ +{pkgs, ...}: { + virtualisation.docker.enable = true; + + environment.systemPackages = with pkgs; [ + arion + ]; + + services.ollama = { + enable = true; + + host = "0.0.0.0"; + port = 11434; + + # probably won't work reliably on Polaris + # acceleration = "rocm"; + }; + + services.nginx = { + enable = true; + + virtualHosts."ai.local" = { + locations."/" = { + proxyPass = "http://127.0.0.1:7000"; + proxyWebsockets = true; + }; + }; + }; + + environment.etc."arion/arion-compose.nix".source = + ./arion-compose.nix; + + systemd.services.odysseus = { + wantedBy = ["multi-user.target"]; + + after = [ + "docker.service" + "ollama.service" + ]; + + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + + WorkingDirectory = "/etc/arion"; + + ExecStart = "${pkgs.arion}/bin/arion up -d"; + + ExecStop = "${pkgs.arion}/bin/arion down"; + }; + }; +} diff --git a/hosts/herra/arion-compose.nix b/hosts/herra/arion-compose.nix new file mode 100644 index 0000000..daa4077 --- /dev/null +++ b/hosts/herra/arion-compose.nix @@ -0,0 +1,50 @@ +{pkgs, ...}: { + project.name = "odysseus"; + + services.odysseus.service = { + image = "ghcr.io/pewdiepie-archdaemon/odysseus:latest"; + + ports = [ + "7000:7000" + ]; + + volumes = [ + "/srv/odysseus/data:/app/data" + ]; + + environment = { + AUTH_ENABLED = "true"; + + LLM_HOST = "host.docker.internal:11434"; + + CHROMADB_HOST = "chromadb"; + + SEARXNG_INSTANCE = "http://searxng:8080"; + }; + + extra_hosts = [ + "host.docker.internal:host-gateway" + ]; + + depends_on = [ + "chromadb" + "searxng" + ]; + }; + + services.chromadb.service = { + image = "chromadb/chroma:latest"; + + volumes = [ + "/srv/odysseus/chroma:/chroma/chroma" + ]; + }; + + services.searxng.service = { + image = "searxng/searxng:latest"; + }; + + services.ntfy.service = { + image = "binwiederhier/ntfy:latest"; + }; +} -- cgit v1.2.3