--- # ------------------------------------------------------------------------------ # FILE: playbooks/day1_deploy_llm_inference_multimodel.yml # DESCRIPTION: Day 1 playbook for the dual-model (aux + tool-calling) rollout # on astro-orbiter. Builds on roles/llm-inference (CUDA/driver # already done) — does not replace it. # # Usage: # cd ~/git/homelab/ansible # ansible-playbook -i inventory.yml playbooks/day1_deploy_llm_inference_multimodel.yml # # or scope to specific phases: # ansible-playbook -i inventory.yml playbooks/day1_deploy_llm_inference_multimodel.yml --tags discover # # EXECUTION CHANNEL (2026-08-12, War Machine): run via the Semaphore template # "llm_inference_multimodel_stage_models" (scoped to --tags models). Do NOT # run this via direct ansible-playbook or ad-hoc ssh/curl/systemctl — all # homelab inference changes go through Ansible roles executed by Semaphore for # audit/visibility. Phase 1 (models) is idempotent: it only downloads/stages a # GGUF when missing or size-mismatched, and only restarts the router when a new # GGUF is detected (normal re-runs that find the files correct touch nothing). # # Phases (see roles/llm-inference-multimodel/README.md for detail): # 0. discover — read-only; confirm existing Gemma service management # 1. models — idempotent GGUF downloads (Phi-4-14B, Mistral-Small-24B) # 2. systemd — deploy both unit files, do NOT auto-start # 3. firewall — scope ports 8000/8001, non-0.0.0.0 bind # 4. verify — start both services, smoke test, VRAM check # ------------------------------------------------------------------------------ - name: Deploy dual-model LLM inference stack on astro-orbiter hosts: astro_orbiter gather_facts: true roles: - role: llm-inference-multimodel