# systemd-USER-Unit für den MC2-Gateway — der /v1-Datenpfad als eigener Prozess (UMBAU v3 P1). # Durch diesen Prozess läuft JEDER LLM-Aufruf der Box (Lucys Hirn, Nacht-Crons, Worker- # Delegation, Vision) — er ist bewusst winzig, wird praktisch nie angefasst und startet # sich immer selbst neu (Restart=always: die Wirbelsäule steht, bevor es jemand merkt). # Loopback-only (:9010): alle kritischen Verbraucher sind box-lokal; LAN-Clients # (IDE-Lane) kommen weiter über MC2 :9001/v1, das roh hierher durchreicht. # Sudo-frei wie alle MC2-Units: ~/.config/systemd/user/ + systemctl --user. [Unit] Description=MC2 Gateway (/v1-Datenpfad: model:auto-Routing + Bild-Weiche) After=network-online.target Wants=network-online.target [Service] Type=simple WorkingDirectory=%h/mission-control-v2/backend ExecStart=%h/mission-control-v2/backend/.venv/bin/python -m uvicorn gateway_app:app --host 127.0.0.1 --port 9010 Environment=PYTHONPATH=%h/mission-control-v2 Environment=MC_LLAMA_SWAP_URL=http://127.0.0.1:8080 Environment=MC_CONFIG_PATH=/etc/llama-swap/config.yaml Environment=MC_MODELS_DIR=/srv/models # Briefkasten-Meldungen (z. B. Kontext-Limit-Warnung) NIE direkt in die Store-Datei — # die gehört exklusiv dem Steuerpult; per HTTP abliefern (gleiches Muster wie mc2-steward). Environment=MC_ANNOUNCE_HTTP=http://127.0.0.1:9001 Restart=always RestartSec=2 # Stoppen darf nicht warten: der Gateway hält minutenlange LLM-Streams offen — uvicorns # „Waiting for connections to close" + default 90 s TimeoutStop machten jeden Restart zum # 502-Fenster (15.07. live gemessen, 14:29→14:31). Stateless Proxy → nach 5 s hart beenden # ist verlustarm; Clients (Hermes api_max_retries=3) wiederholen abgerissene Anfragen. TimeoutStopSec=5 [Install] WantedBy=default.target