[Unit] # Singleton: this automation must run on mainframe and nowhere else. # Structural guard is hosts/mainframe/ placement; this is the backstop. ConditionHost=mainframe Description=Generate movie recommendations from the Radarr library and push to ntfy # LiteLLM is a container, not a user unit, so this cannot Requires= it. # The script pushes a failure notification if it is unreachable. # # Timing note: this asks for gemma3-12b, which llama-swap loads on demand and # which EVICTS the resident gpt-oss-20b for the duration (one llama-server at # a time, one GPU). gemma3-12b then unloads on its own after 900 s idle. So an # 08:00 run costs the next OpenCode request a cold gpt-oss-20b reload. That is # the intended trade -- a once-daily swap is exactly the "keep swaps rare" # budget the llama-swap config is written around. After=network-online.target [Service] Type=oneshot ExecStart=%h/.dotfiles/hosts/mainframe/bin/movie_recs_notify # Generation on a partially-offloaded model is slow; do not let systemd # kill a run that is still making progress. TimeoutStartSec=2700 Nice=10