From 285d05e72ee6f3b842e46e850f3b96991229844d Mon Sep 17 00:00:00 2001 From: Wojciech Taisner Date: Sun, 1 Nov 2026 03:28:58 +0100 Subject: [PATCH] fix(docker): forward ODYSSEUS_FIRST_TOKEN_TIMEOUT through compose (#6778) Co-authored-by: Alexandre Teixeira --- docker-compose.gpu-amd.yml | 2 ++ docker-compose.gpu-nvidia.yml | 2 ++ docker-compose.yml | 2 ++ tests/test_docker_devops_hardening.py | 8 ++++++++ 4 files changed, 14 insertions(+) diff --git a/docker-compose.gpu-amd.yml b/docker-compose.gpu-amd.yml index ae9a3336d..7f39a1c66 100644 --- a/docker-compose.gpu-amd.yml +++ b/docker-compose.gpu-amd.yml @@ -89,6 +89,8 @@ services: - ODYSSEUS_WORKSPACE_HOST_ROOT=${ODYSSEUS_WORKSPACE_HOST_ROOT:-} - ODYSSEUS_WORKSPACE_CONTAINER_ROOT=${ODYSSEUS_WORKSPACE_CONTAINER_ROOT:-/workspace} - ODYSSEUS_WORKSPACE_DEFAULT=${ODYSSEUS_WORKSPACE_DEFAULT:-} + # Local first-token watchdog in seconds; 0 disables it. Empty keeps the code default (60s). + - ODYSSEUS_FIRST_TOKEN_TIMEOUT=${ODYSSEUS_FIRST_TOKEN_TIMEOUT:-} - DATA_BRAVE_API_KEY=${DATA_BRAVE_API_KEY:-} - GOOGLE_API_KEY=${GOOGLE_API_KEY:-} - GOOGLE_PSE_CX=${GOOGLE_PSE_CX:-} diff --git a/docker-compose.gpu-nvidia.yml b/docker-compose.gpu-nvidia.yml index b9f5df506..acba99092 100644 --- a/docker-compose.gpu-nvidia.yml +++ b/docker-compose.gpu-nvidia.yml @@ -88,6 +88,8 @@ services: - ODYSSEUS_WORKSPACE_HOST_ROOT=${ODYSSEUS_WORKSPACE_HOST_ROOT:-} - ODYSSEUS_WORKSPACE_CONTAINER_ROOT=${ODYSSEUS_WORKSPACE_CONTAINER_ROOT:-/workspace} - ODYSSEUS_WORKSPACE_DEFAULT=${ODYSSEUS_WORKSPACE_DEFAULT:-} + # Local first-token watchdog in seconds; 0 disables it. Empty keeps the code default (60s). + - ODYSSEUS_FIRST_TOKEN_TIMEOUT=${ODYSSEUS_FIRST_TOKEN_TIMEOUT:-} - DATA_BRAVE_API_KEY=${DATA_BRAVE_API_KEY:-} - GOOGLE_API_KEY=${GOOGLE_API_KEY:-} - GOOGLE_PSE_CX=${GOOGLE_PSE_CX:-} diff --git a/docker-compose.yml b/docker-compose.yml index e04c5584a..ded36c464 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -77,6 +77,8 @@ services: - ODYSSEUS_WORKSPACE_HOST_ROOT=${ODYSSEUS_WORKSPACE_HOST_ROOT:-} - ODYSSEUS_WORKSPACE_CONTAINER_ROOT=${ODYSSEUS_WORKSPACE_CONTAINER_ROOT:-/workspace} - ODYSSEUS_WORKSPACE_DEFAULT=${ODYSSEUS_WORKSPACE_DEFAULT:-} + # Local first-token watchdog in seconds; 0 disables it. Empty keeps the code default (60s). + - ODYSSEUS_FIRST_TOKEN_TIMEOUT=${ODYSSEUS_FIRST_TOKEN_TIMEOUT:-} - DATA_BRAVE_API_KEY=${DATA_BRAVE_API_KEY:-} - GOOGLE_API_KEY=${GOOGLE_API_KEY:-} - GOOGLE_PSE_CX=${GOOGLE_PSE_CX:-} diff --git a/tests/test_docker_devops_hardening.py b/tests/test_docker_devops_hardening.py index 860d708c8..378b5b431 100644 --- a/tests/test_docker_devops_hardening.py +++ b/tests/test_docker_devops_hardening.py @@ -67,6 +67,14 @@ def test_compose_files_forward_companion_base_url(): assert "COMPANION_BASE_URL" in _compose_env_names(path), path.name +def test_compose_files_forward_first_token_timeout(): + # The local first-event watchdog (src/llm_core.py) reads this from the + # process environment, so a Docker install can only reach it when the + # compose files forward it from the host .env. + for path in COMPOSE_FILES: + assert "ODYSSEUS_FIRST_TOKEN_TIMEOUT" in _compose_env_names(path), path.name + + def test_default_compose_files_do_not_mount_host_docker_socket(): for path in COMPOSE_FILES: text = path.read_text(encoding="utf-8")