OpenBMB/ChatDev · error · DesignError
'{legacy_key}' is deprecated. Use the new graph-level memory
Error message
'{legacy_key}' is deprecated. Use the new graph-level memory stores for node '{nid}'. What it means
409 Conflict raised by POST /api/tools/local when the target .py file already exists in the function tools directory and the request did not set overwrite=true.
Source
Thrown at check/check.py:46
def _ensure_supported(graph: Dict[str, Any]) -> None:
"""Ensure the MVP constraints are satisfied for the provided graph."""
for node in graph.get("nodes", []) or []:
nid = node.get("id")
ntype = node.get("type")
allowed = _allowed_node_types()
if ntype not in allowed:
raise DesignError(
f"Unsupported node type '{ntype}' for node '{nid}'. Only {allowed} nodes are supported."
)
if ntype == "agent":
agent_cfg = node.get("config") or {}
if not isinstance(agent_cfg, dict):
raise DesignError(f"Agent node '{nid}' config must be an object")
for legacy_key in ["memory"]:
if legacy_key in agent_cfg:
raise DesignError(
f"'{legacy_key}' is deprecated. Use the new graph-level memory stores for node '{nid}'."
)
def load_config(
config_path: Path,
*,
fn_module: Optional[str] = None,
set_defaults: bool = True,
vars_override: Optional[Dict[str, Any]] = None,
) -> DesignConfig:
"""Load, validate, and sanity-check a workflow file."""
try:
raw_data = read_yaml(config_path)
except FileNotFoundError as exc:
raise DesignError(f"Design file not found: {config_path}") from exc
View on GitHub (pinned to 4fb2db0ea9)
Solutions
- Set "overwrite": true in the request body when you intend to replace the file.
- Or pick a new unique filename.
- Make creation scripts idempotent by catching 409 and retrying with overwrite.
Example fix
# before
payload = {"filename": "my_tool", "content": code}
# after
payload = {"filename": "my_tool", "content": code, "overwrite": True} Defensive patterns
Strategy: try-catch
Validate before calling
// check existence first via the tools listing endpoint if available
Try / catch
try { create(name) } catch (e) { if (e.status === 409) create(name, {overwrite: true}) else throw e } Prevention
- Pass overwrite:true for idempotent scripts
- Use unique names per deployment
When it happens
Trigger: Creating a tool whose filename already exists on disk without {"overwrite": true} in the payload; re-running an upload script after a previous successful run.
Common situations: Idempotent deployment scripts that re-create tools; iterating on a tool and forgetting the overwrite flag; CI pipelines that replay creation requests.
Related errors
- No node types registered; cannot validate workflow
- 1
- Unsupported node type '{ntype}' for node '{nid}'. Only {allo
- Agent node '{nid}' config must be an object
- Design file not found: {config_path}
AI-assisted analysis of OpenBMB/ChatDev@4fb2db0ea9 (2026-08-27).
Data as JSON: /api/errors/d62ced19e0fcf24b.
Report an issue: GitHub.