#!/usr/bin/env python3 """Audio keep-alive: ping the Tinfoil TEE audio models through localhost LiteLLM so voice mode doesn't pay the ~24s cold-start after idle. Runs INSIDE the gateway container via the Cloudron scheduler addon. Uses the LITELLM_MASTER_KEY already in the container env. TTS-only (STT pings cost $0.01/request each; TTS $0.002 — see docs, keep-alive economics). Silent on success; prints + exits non-zero on failure so scheduler logs capture it. """ import json, os, urllib.request, urllib.error, sys PORT = os.environ.get("PORT", "4000") KEY = os.environ.get("LITELLM_MASTER_KEY", "") if not KEY: print("keepalive: LITELLM_MASTER_KEY not set", file=sys.stderr) sys.exit(1) fail = 0 # TTS warm (voxtral-tts) — $0.002/request (Tinfoil request-priced) req = urllib.request.Request( f"http://127.0.0.1:{PORT}/v1/audio/speech", data=json.dumps({"model": "tinfoil/voxtral-tts", "input": "ok", "voice": "casual_female"}).encode(), method="POST", headers={"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"}) try: urllib.request.urlopen(req, timeout=30) except Exception as e: print(f"keepalive: TTS ping failed: {e}", file=sys.stderr) fail = 1 # STT warm disabled 2026-10-11: $0.01/STT request × 6/hr ≈ $52/mo. Revisit only # with a cheaper warm strategy. sys.exit(fail)