Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion velvetflow/planner/params_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,13 @@ def _reasoning_params_schema() -> Dict[str, Any]:
"items": {"type": "string"},
},
},
"required": ["task_prompt"],
"required": [
"system_prompt",
"task_prompt",
"context",
"expected_output_format",
"toolset",
],
"additionalProperties": True,
}

Expand Down
28 changes: 28 additions & 0 deletions velvetflow/planner/structure.py
Original file line number Diff line number Diff line change
Expand Up @@ -1435,6 +1435,34 @@ def add_reasoning_node(
params=params or {},
action_schemas=action_schemas,
)
required_reasoning_fields = (
"system_prompt",
"task_prompt",
"context",
"expected_output_format",
"toolset",
)
missing_reasoning_fields = []
for field in required_reasoning_fields:
value = cleaned_params.get(field)
if value is None:
missing_reasoning_fields.append(field)
elif isinstance(value, str) and not value.strip():
missing_reasoning_fields.append(field)
elif isinstance(value, (list, dict)) and not value:
missing_reasoning_fields.append(field)
Comment on lines +1449 to +1453
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Allow empty context/toolset for reasoning nodes

The new validation treats any empty list/dict/blank string as “missing” for all required reasoning fields, so toolset: [] or context: {} now causes add_reasoning_node to reject nodes that intentionally have no tools or no context. This is a regression because the executor already tolerates toolset being empty (it resolves to no tools) and can build prompts without context; workflows that previously created tool-free or context-free reasoning nodes will now fail validation even though they still execute correctly.

Useful? React with 👍 / 👎.

if missing_reasoning_fields:
result = _build_validation_error(
(
"reasoning 节点 params 缺少必填字段,"
"且 out_params_schema 必须与 expected_output_format 一致。"
"请补全后重新调用 add_reasoning_node。"
),
missing_fields=missing_reasoning_fields,
required_fields=list(required_reasoning_fields),
required_out_params_schema="expected_output_format",
)
return _return_tool_result("add_reasoning_node", result)
out_params_schema = cleaned_params.get("expected_output_format")
ref_error = _validate_existing_references(
node_id=id, params=cleaned_params, depends_on=depends_on or []
Expand Down
Loading