diff --git a/python/sglang/srt/environ.py b/python/sglang/srt/environ.py index e443170f8..fd001185c 100644 --- a/python/sglang/srt/environ.py +++ b/python/sglang/srt/environ.py @@ -11,9 +11,8 @@ class EnvField: def __init__(self, default: Any): self.default = default - # NOTE: we use None to indicate whether the value is set or not - # If the value is manually set to None, we need mark it as _set_to_none. - # Always use clear() to reset the value, which leads to the default fallback. + # NOTE: environ can only accept str values, so we need a flag to indicate + # whether the env var is explicitly set to None. self._set_to_none = False def __set_name__(self, owner, name): @@ -25,10 +24,13 @@ class EnvField: def get(self) -> Any: value = os.getenv(self.name) + + # Explicitly set to None if self._set_to_none: - assert value is None + assert value == str(None) return None + # Not set, return default if value is None: return self.default @@ -41,20 +43,11 @@ class EnvField: return self.default def is_set(self): - # NOTE: If None is manually set, it is considered as set. - return self.name in os.environ or self._set_to_none - - def get_set_value_or(self, or_value: Any): - # NOTE: Ugly usage, but only way to get custom default value. - return self.get() if self.is_set() else or_value + return self.name in os.environ def set(self, value: Any): - if value is None: - self._set_to_none = True - os.environ.pop(self.name, None) - else: - self._set_to_none = False - os.environ[self.name] = str(value) + self._set_to_none = value is None + os.environ[self.name] = str(value) @contextmanager def override(self, value: Any):