OpenBMB/ChatDev · error · ConfigError
startup_timeout must be numeric
Error message
startup_timeout must be numeric
What it means
Raised when the stdio tooling 'startup_timeout' is present but non-numeric. It bounds how long the launcher waits for the process to become ready; only int/float are accepted (default 10.0).
Source
Thrown at entity/configs/node/tooling.py:534
inherit_env = optional_bool(mapping, "inherit_env", path, default=True)
if inherit_env is None:
inherit_env = True
env_mapping = mapping.get("env")
if env_mapping is not None:
if not isinstance(env_mapping, Mapping):
raise ConfigError("env must be a mapping", extend_path(path, "env"))
env = {str(k): str(v) for k, v in env_mapping.items()}
else:
env = {}
timeout_value = mapping.get("startup_timeout", 10.0)
if timeout_value is None:
startup_timeout = 10.0
elif isinstance(timeout_value, (int, float)):
startup_timeout = float(timeout_value)
else:
raise ConfigError("startup_timeout must be numeric", extend_path(path, "startup_timeout"))
wait_for_log = optional_str(mapping, "wait_for_log", path)
cache_ttl_value = mapping.get("cache_ttl", 0.0)
if cache_ttl_value is None:
cache_ttl = 0.0
elif isinstance(cache_ttl_value, (int, float)):
cache_ttl = float(cache_ttl_value)
else:
raise ConfigError("cache_ttl must be numeric", extend_path(path, "cache_ttl"))
return cls(
command=command,
args=normalized_args,
cwd=cwd,
env=env,
inherit_env=bool(inherit_env),
startup_timeout=startup_timeout,
wait_for_log=wait_for_log,
cache_ttl=cache_ttl,View on GitHub (pinned to 4fb2db0ea9)
Solutions
- Write the value unquoted: startup_timeout: 15
- Or use float(...) coercion upstream before from_dict
- Drop the key to accept the 10.0 default
Example fix
# before startup_timeout: "15" # after startup_timeout: 15
Defensive patterns
Strategy: validation
Validate before calling
v = cfg.get("startup_timeout", 10.0)
assert v is None or isinstance(v, (int, float)) and not isinstance(v, bool) Type guard
def numeric_or_none(v) -> bool:
return v is None or (isinstance(v, (int, float)) and not isinstance(v, bool)) Try / catch
except ConfigError as e:
if "startup_timeout" in str(e):
cfg["startup_timeout"] = float(cfg["startup_timeout"]) Prevention
- Leave startup_timeout unquoted
- Null is allowed and falls back to 10.0
When it happens
Trigger: startup_timeout: "15" in the tooling config; YAML quoting; value null is allowed (falls back to 10.0) but strings/bools are not.
Common situations: Tuning slow-starting MCP servers by copying a quoted example value; config templating that emits strings.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
- args entries must be strings
- env must be a mapping
- tooling must be a list
- timeout_seconds must be a positive integer
- cache_ttl must be numeric
AI-assisted analysis of OpenBMB/ChatDev@4fb2db0ea9 (2026-08-27).
Data as JSON: /api/errors/600f8724240f12a2.
Report an issue: GitHub.