bytedance/deer-flow · error · ValueError
mem0 startup_policy must be one of
Error message
mem0 startup_policy must be one of {sorted(_STARTUP_POLICIES)} What it means
Raised by Mem0Config.from_backend_config when memory.backend_config.startup_policy is not one of the two supported values: fail_fast (default; performs an auth check in from_config so a bad key/URL fails at boot) and tolerate (defer checks to first use). The values are checked after str() coercion, so any other string (including typos and case variants) is rejected.
Solutions
- Use exactly fail_fast or tolerate (lowercase, underscore)
- For production, keep the default fail_fast so auth problems surface at startup
- Remove the key entirely if the default (fail_fast) is what you want
Example fix
# before (config.yaml)
memory:
backend_config:
startup_policy: fast-fail # not recognized
# after
memory:
backend_config:
startup_policy: fail_fast Defensive patterns
Strategy: validation
Validate before calling
STARTUP_POLICIES = {"fail_fast", "tolerate"}
def startup_policy_ok(backend_config: dict) -> bool:
return str((backend_config or {}).get("startup_policy", "fail_fast")) in STARTUP_POLICIES Type guard
def is_startup_policy(v: object) -> bool:
return v in ("fail_fast", "tolerate") Prevention
- Use the exact lowercase tokens fail_fast / tolerate
- Omit the key when the default (fail_fast) is desired — fewer tokens, fewer typo surfaces
When it happens
Trigger: startup_policy: fast_fail, fail-fast, Fail_Fast, lazy, or startup_policy: "" in backend_config.
Common situations: Typos and case mismatches; using vocabulary from other systems (lazy/deferred/eager); copy-pasting from outdated docs.
Related errors
- mem0 allow_insecure_http must be a boolean
- mem0 api_key_env must be a non-empty env var name
- mem0 backend_config has unknown keys
- mem0 base_url must be an absolute http:// or https:// URL
- mem0 failure_policy has unknown keys
AI-assisted analysis of bytedance/deer-flow@1dd6ba1acb (2026-08-14).
Data as JSON: /api/errors/4c67c72e37c06974.
Report an issue: GitHub.
Appendix: source
Thrown at backend/packages/harness/deerflow/agents/memory/backends/mem0/config.py:97
raise ValueError(f"mem0 failure_policy has unknown keys: {sorted(unknown_fp)}")
allow_insecure_http = cfg.get("allow_insecure_http", False)
if not isinstance(allow_insecure_http, bool):
raise ValueError("mem0 allow_insecure_http must be a boolean")
config = cls(
api_key_env=str(cfg.get("api_key_env", "MEM0_API_KEY")),
base_url=str(cfg.get("base_url", "https://api.mem0.ai")).rstrip("/"),
allow_insecure_http=allow_insecure_http,
top_k=int(cfg.get("top_k", 8)),
score_threshold=float(cfg.get("score_threshold", 0.1)),
max_injection_chars=int(cfg.get("max_injection_chars", 12000)),
timeout_seconds=float(cfg.get("timeout_seconds", 10.0)),
startup_policy=str(cfg.get("startup_policy", "fail_fast")),
read_policy=str(failure_policy.get("read", "fail_open")),
write_policy=str(failure_policy.get("write", "log_and_drop")),
)
if config.startup_policy not in _STARTUP_POLICIES:
raise ValueError(f"mem0 startup_policy must be one of {sorted(_STARTUP_POLICIES)}")
if config.read_policy not in _READ_POLICIES:
raise ValueError(f"mem0 failure_policy.read must be one of {sorted(_READ_POLICIES)}")
if config.write_policy not in _WRITE_POLICIES:
raise ValueError(f"mem0 failure_policy.write must be one of {sorted(_WRITE_POLICIES)}")
if not 1 <= config.top_k <= 1000:
raise ValueError("mem0 top_k must be in [1, 1000]")
if not 0.0 <= config.score_threshold <= 1.0:
raise ValueError("mem0 score_threshold must be in [0, 1]")
if config.max_injection_chars <= 0:
raise ValueError("mem0 max_injection_chars must be positive")
if config.timeout_seconds <= 0:
raise ValueError("mem0 timeout_seconds must be positive")
if not config.api_key_env.strip():
raise ValueError("mem0 api_key_env must be a non-empty env var name")
parsed_base_url = urlsplit(config.base_url)
if parsed_base_url.scheme not in {"http", "https"} or not parsed_base_url.netloc:
raise ValueError("mem0 base_url must be an absolute http:// or https:// URL")
if parsed_base_url.scheme == "http" and not config.allow_insecure_http:View on GitHub (pinned to 1dd6ba1acb)