{
  "_description": "Tunables for gemini/* modules. Loaded via core.config_loader.load('gemini'). API credentials (api_key, model, voice_name) still live in core_config.json > gemini_defaults — single source of truth shared with config.py.",

  "client": {
    "_comment": "gemini/client.py — short-session WebSocket client used by dashboard /generate + typed replay. default_system_prompt comes from core.gemini_defaults.",
    "recv_timeout_sec": 30,
    "reconnect_max_attempts": 3,
    "reconnect_initial_delay_sec": 1.0,
    "reconnect_max_delay_sec": 10.0
  },

  "subprocess": {
    "_comment": "gemini/subprocess.py — GeminiSubprocess supervisor. Spawns voice/sanad_voice.py as a child, tails stdout for Gemini-specific log markers, exposes transcript + state to the dashboard.",
    "log_tail_size": 2000,
    "transcript_tail_size": 30,
    "log_name": "gemini_subprocess",
    "stop_timeout_sec": 3.0,
    "terminate_timeout_sec": 2.0,
    "noisy_prefixes": [
      "ALSA lib ",
      "Expression 'alsa_",
      "Cannot connect to server socket",
      "jack server is not running"
    ],
    "noisy_fragments": [
      "Unknown PCM",
      "Evaluate error",
      "snd_pcm_open_noupdate",
      "PaAlsaStream",
      "snd_config_evaluate",
      "snd_func_refer"
    ]
  }
}
