From 285c208cf7b5bd67d055a952cd7e748b32ecaf73 Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Tue, 5 May 2026 05:37:28 -0700 Subject: [PATCH] fix(gateway): also tolerate malformed env vars in custom human-delay mode Widens @Krionex's PR #16933 fix to cover the second bug class at the sibling site. natural mode used to pass env values through int() before the PR caught mis-typed values crashing the gateway; custom mode had the exact same bug one branch away (HERMES_HUMAN_DELAY_MIN_MS=oops in custom mode still crashed). Same try/except/fallback pattern, scoped to the two int() calls that feed random.uniform(). --- gateway/platforms/base.py | 11 +++++++++-- tests/gateway/test_platform_base.py | 11 +++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gateway/platforms/base.py b/gateway/platforms/base.py index 8b34f461aa..5c2bbf96aa 100644 --- a/gateway/platforms/base.py +++ b/gateway/platforms/base.py @@ -2678,8 +2678,15 @@ class BasePlatformAdapter(ABC): if mode == "natural": min_ms, max_ms = 800, 2500 return random.uniform(min_ms / 1000.0, max_ms / 1000.0) - min_ms = int(os.getenv("HERMES_HUMAN_DELAY_MIN_MS", "800")) - max_ms = int(os.getenv("HERMES_HUMAN_DELAY_MAX_MS", "2500")) + # custom mode — tolerate malformed env vars instead of crashing. + try: + min_ms = int(os.getenv("HERMES_HUMAN_DELAY_MIN_MS", "800")) + except (TypeError, ValueError): + min_ms = 800 + try: + max_ms = int(os.getenv("HERMES_HUMAN_DELAY_MAX_MS", "2500")) + except (TypeError, ValueError): + max_ms = 2500 return random.uniform(min_ms / 1000.0, max_ms / 1000.0) async def _process_message_background(self, event: MessageEvent, session_key: str) -> None: diff --git a/tests/gateway/test_platform_base.py b/tests/gateway/test_platform_base.py index dd6ffaf951..84f3b7239f 100644 --- a/tests/gateway/test_platform_base.py +++ b/tests/gateway/test_platform_base.py @@ -512,6 +512,17 @@ class TestGetHumanDelay: delay = BasePlatformAdapter._get_human_delay() assert 0.1 <= delay <= 0.2 + def test_custom_mode_tolerates_malformed_env_vars(self): + env = { + "HERMES_HUMAN_DELAY_MODE": "custom", + "HERMES_HUMAN_DELAY_MIN_MS": "oops", + "HERMES_HUMAN_DELAY_MAX_MS": "still-bad", + } + with patch.dict(os.environ, env): + # falls back to the custom-mode defaults instead of crashing + delay = BasePlatformAdapter._get_human_delay() + assert 0.8 <= delay <= 2.5 + # --------------------------------------------------------------------------- # utf16_len / _prefix_within_utf16_limit / truncate_message with len_fn