{"settings":{"sample_rate":16000,"vad_threshold":0.5,"min_silence_ms":450,"speech_pad_ms":80,"whisper_model":"base","whisper_device":"cpu","whisper_compute_type":"int8","whisper_beam_size":1,"groq_model":"llama-3.3-70b-versatile","groq_temperature":0.25,"groq_max_tokens":160,"groq_api_key_set":true,"piper_model":"/opt/piper/voices/en_US-lessac-medium.onnx","piper_config":"/opt/piper/voices/en_US-lessac-medium.onnx.json","piper_binary":"piper","tts_flush_chars":".,!?\n","tts_min_flush_tail":42,"agent_log_file":"/var/www/agent.scorpion.codes/logs/turns.jsonl","system_prompt":"You are \"Jamie\" on a phone call. Reply in at most ONE or TWO short spoken sentences (under 35 words total).\nNo bullet points, no markdown, no lists. Sound human. If one short follow-up question helps, add it.","system_prompt_length":208,"system_tone":"","system_tone_length":0,"resolved_system_preview":"You are \"Jamie\" on a phone call. Reply in at most ONE or TWO short spoken sentences (under 35 words total).\nNo bullet points, no markdown, no lists. Sound human. If one short follow-up question helps, add it.\n\nTone and speaking style:\nWarm, concise, and clear. Sound like a helpful friend on a quick call — not a lecture.","groq_daily_request_limit":1000,"groq_daily_token_limit":100000,"runtime_admin_enabled":true},"options":[{"category":"Groq (LLM)","env":"GROQ_API_KEY","value":"(set)","description":"Secret API key from console.groq.com. Never commit; use .env only."},{"category":"Groq (LLM)","env":"GROQ_MODEL","value":"llama-3.3-70b-versatile","description":"Groq chat model id, e.g. llama-3.3-70b-versatile."},{"category":"Groq (LLM)","env":"GROQ_MAX_TOKENS","value":"160","description":"Max completion tokens per reply (lower = shorter voice and lower token usage)."},{"category":"Groq (LLM)","env":"GROQ_TEMPERATURE","value":"0.25","description":"Sampling temperature (lower = more focused)."},{"category":"Whisper (STT)","env":"WHISPER_MODEL","value":"base","description":"faster-whisper size: tiny, base, small, … Smaller = faster on CPU."},{"category":"Whisper (STT)","env":"WHISPER_DEVICE","value":"cpu","description":"Usually cpu on your VPS."},{"category":"Whisper (STT)","env":"WHISPER_COMPUTE_TYPE","value":"int8","description":"int8 recommended for CPU; reduces RAM and speeds inference."},{"category":"Whisper (STT)","env":"WHISPER_BEAM_SIZE","value":"1","description":"1 = fastest decode (default). 3–5 = slightly better quality, slower."},{"category":"Piper (TTS)","env":"PIPER_MODEL","value":"/opt/piper/voices/en_US-lessac-medium.onnx","description":"Filesystem path to the voice .onnx file from Piper releases."},{"category":"Piper (TTS)","env":"PIPER_CONFIG","value":"/opt/piper/voices/en_US-lessac-medium.onnx.json","description":"Optional path to the matching .onnx.json next to the voice."},{"category":"Piper (TTS)","env":"PIPER_BINARY","value":"piper","description":"Name or path of the piper executable on PATH."},{"category":"VAD","env":"VAD_THRESHOLD","value":"0.5","description":"Silero speech probability threshold for starting an utterance (higher = stricter)."},{"category":"VAD","env":"MIN_SILENCE_MS","value":"450","description":"Silence duration before an utterance is considered finished (~32 ms per 512-sample frame at 16 kHz)."},{"category":"VAD","env":"SPEECH_PAD_MS","value":"80","description":"Reserved for future padding tweaks in VAD (documented for parity with CLI)."},{"category":"TTS streaming","env":"TTS_FLUSH_CHARS","value":"'.,!?\\n'","description":"Characters that trigger Piper early; include comma for faster first spoken chunk."},{"category":"TTS streaming","env":"TTS_MIN_FLUSH_TAIL","value":"42","description":"If no flush char yet, force a break after this many characters (smaller = earlier audio, choppier)."},{"category":"Persona","env":"SYSTEM_PROMPT","value":"(208 chars — fallback if prompts/system.txt missing/empty)","description":"Default system text. Overridden by prompts/system.txt when that file has content."},{"category":"Persona","env":"SYSTEM_TONE","value":"(empty — optional)","description":"Extra tone/voice lines. Overridden by prompts/tone.txt when that file has content."},{"category":"Server","env":"PORT","value":"8000","description":"Uvicorn port when running python server.py (override default 8000)."},{"category":"Observability","env":"AGENT_LOG_FILE","value":"/var/www/agent.scorpion.codes/logs/turns.jsonl","description":"Append-only JSONL path for per-turn timings (Whisper / LLM / TTS). Example: tail -f logs/turns.jsonl"},{"category":"Dashboard","env":"GROQ_DAILY_REQUEST_LIMIT","value":"1000","description":"Shown on the usage bar vs counted Groq turns today (not enforced by Groq)."},{"category":"Dashboard","env":"GROQ_DAILY_TOKEN_LIMIT","value":"100000","description":"Shown on the usage bar vs summed tokens today (not enforced by Groq)."},{"category":"Dashboard","env":"AGENT_ADMIN_TOKEN","value":"(set)","description":"Bearer token required to POST /api/runtime-settings from the UI."}]}