diff --git a/docker-compose.yml b/docker-compose.yml index 3d66366..dbe60a0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -69,6 +69,11 @@ services: WHISPER_COMPUTE_TYPE: ${WHISPER_COMPUTE_TYPE:-float16} # Optional single-language lock for replies (empty = user's own language). OUTPUT_LANGUAGE: ${OUTPUT_LANGUAGE:-} + # Drop the pre-loop planner LLM call to cut voice-reply latency on small + # hardware (the planner adds a full model round-trip per turn). + PLANNER_ENABLED: ${PLANNER_ENABLED:-0} + # Lock STT to Korean (skip Whisper auto-detect). + STT_LANGUAGE: ${STT_LANGUAGE:-ko} BRIDGE_URL: http://127.0.0.1:8765 depends_on: - ollama diff --git a/src/jarvis/config.py b/src/jarvis/config.py index 2fbae32..cbc61f1 100644 --- a/src/jarvis/config.py +++ b/src/jarvis/config.py @@ -710,7 +710,15 @@ def load_settings() -> Settings: else: evaluator_enabled = bool(_eval_raw) planner_model = str(merged.get("planner_model", "") or "").strip() - planner_enabled = bool(merged.get("planner_enabled", True)) + # Env override (PLANNER_ENABLED=0/1) so a latency-sensitive voice deployment + # can drop the pre-loop planner LLM call without editing the config file. + _planner_env = os.environ.get("PLANNER_ENABLED", "").strip().lower() + if _planner_env in ("0", "false", "no", "off"): + planner_enabled = False + elif _planner_env in ("1", "true", "yes", "on"): + planner_enabled = True + else: + planner_enabled = bool(merged.get("planner_enabled", True)) try: planner_timeout_sec = float(merged.get("planner_timeout_sec", 6.0)) except (TypeError, ValueError):