workflow builder deprecated field stop use in wf_mcp
This commit is contained in:
@@ -10,15 +10,17 @@ from wf_core.models.steps import InputValueBinding
|
||||
|
||||
|
||||
def test_adapter_lowers_keyed_use_steps_and_routes_through_builder() -> None:
|
||||
draft = WorkflowDraft.model_validate({
|
||||
"name": "echo",
|
||||
"input_schema": {},
|
||||
"state_schema": {"fields": {}},
|
||||
"output_schema": {},
|
||||
"start": "echo",
|
||||
"steps": {"echo": {"use": "demo.echo"}},
|
||||
"routes": {"echo": {"ok": "__end__"}},
|
||||
})
|
||||
draft = WorkflowDraft.model_validate(
|
||||
{
|
||||
"name": "echo",
|
||||
"input_schema": {},
|
||||
"state_schema": {"fields": {}},
|
||||
"output_schema": {},
|
||||
"start": "echo",
|
||||
"steps": {"echo": {"use": "demo.echo"}},
|
||||
"routes": {"echo": {"ok": "__end__"}},
|
||||
}
|
||||
)
|
||||
|
||||
workflow = build_workflow_from_draft(draft)
|
||||
|
||||
@@ -31,22 +33,56 @@ def test_adapter_lowers_keyed_use_steps_and_routes_through_builder() -> None:
|
||||
assert workflow.edges[0].to == "__end__"
|
||||
|
||||
|
||||
def test_adapter_lowers_use_steps_to_canonical_bindings() -> None:
|
||||
draft = WorkflowDraft.model_validate(
|
||||
{
|
||||
"name": "echo",
|
||||
"input_schema": {},
|
||||
"state_schema": {"fields": {"echoed": {"type": "string"}}},
|
||||
"output_schema": {},
|
||||
"start": "echo",
|
||||
"steps": {
|
||||
"echo": {
|
||||
"use": "demo.echo",
|
||||
"in": {"input.text": "text"},
|
||||
"out": {"echoed": "state.echoed"},
|
||||
}
|
||||
},
|
||||
"routes": {"echo": {"ok": "__end__"}},
|
||||
}
|
||||
)
|
||||
|
||||
workflow = build_workflow_from_draft(draft)
|
||||
node = workflow.nodes[0]
|
||||
|
||||
assert isinstance(node, NodeUse)
|
||||
dumped = node.model_dump(mode="json")
|
||||
assert "in_map" not in dumped
|
||||
assert "out_map" not in dumped
|
||||
assert dumped["input"][0]["target"] == {"root": "local", "parts": ["text"]}
|
||||
assert dumped["input"][0]["path"] == {"root": "input", "parts": ["text"]}
|
||||
assert dumped["output"][0]["source"] == {"root": "local", "parts": ["echoed"]}
|
||||
assert dumped["output"][0]["target"] == {"root": "state", "parts": ["echoed"]}
|
||||
|
||||
|
||||
def test_adapter_lowers_static_inputs_for_constant_like_steps() -> None:
|
||||
draft = WorkflowDraft.model_validate({
|
||||
"name": "constant",
|
||||
"input_schema": {},
|
||||
"state_schema": {"fields": {"message": {"type": "string"}}},
|
||||
"output_schema": {},
|
||||
"start": "constant",
|
||||
"steps": {
|
||||
"constant": {
|
||||
"use": "wf.std.constant",
|
||||
"with": {"value": "CLICKED"},
|
||||
"out": {"value": "state.message"},
|
||||
}
|
||||
},
|
||||
"routes": {"constant": {"ok": "__end__"}},
|
||||
})
|
||||
draft = WorkflowDraft.model_validate(
|
||||
{
|
||||
"name": "constant",
|
||||
"input_schema": {},
|
||||
"state_schema": {"fields": {"message": {"type": "string"}}},
|
||||
"output_schema": {},
|
||||
"start": "constant",
|
||||
"steps": {
|
||||
"constant": {
|
||||
"use": "wf.std.constant",
|
||||
"with": {"value": "CLICKED"},
|
||||
"out": {"value": "state.message"},
|
||||
}
|
||||
},
|
||||
"routes": {"constant": {"ok": "__end__"}},
|
||||
}
|
||||
)
|
||||
|
||||
workflow = build_workflow_from_draft(draft)
|
||||
node = workflow.nodes[0]
|
||||
@@ -88,28 +124,30 @@ def test_invalid_literal_input_map_does_not_fall_through_to_join() -> None:
|
||||
|
||||
|
||||
def test_adapter_lowers_when_step_through_builder() -> None:
|
||||
draft = WorkflowDraft.model_validate({
|
||||
"name": "when_example",
|
||||
"input_schema": {},
|
||||
"state_schema": {"fields": {}},
|
||||
"output_schema": {},
|
||||
"start": "decide",
|
||||
"steps": {
|
||||
"decide": {
|
||||
"when": {
|
||||
"if": {
|
||||
"op": "ge",
|
||||
"left": {"path": "state.count"},
|
||||
"right": {"value": 1},
|
||||
},
|
||||
"then": "echo",
|
||||
"otherwise": "__end__",
|
||||
}
|
||||
draft = WorkflowDraft.model_validate(
|
||||
{
|
||||
"name": "when_example",
|
||||
"input_schema": {},
|
||||
"state_schema": {"fields": {}},
|
||||
"output_schema": {},
|
||||
"start": "decide",
|
||||
"steps": {
|
||||
"decide": {
|
||||
"when": {
|
||||
"if": {
|
||||
"op": "ge",
|
||||
"left": {"path": "state.count"},
|
||||
"right": {"value": 1},
|
||||
},
|
||||
"then": "echo",
|
||||
"otherwise": "__end__",
|
||||
}
|
||||
},
|
||||
"echo": {"use": "demo.echo"},
|
||||
},
|
||||
"echo": {"use": "demo.echo"},
|
||||
},
|
||||
"routes": {"echo": {"ok": "__end__"}},
|
||||
})
|
||||
"routes": {"echo": {"ok": "__end__"}},
|
||||
}
|
||||
)
|
||||
|
||||
workflow = build_workflow_from_draft(draft)
|
||||
condition = workflow.nodes[0]
|
||||
@@ -124,43 +162,45 @@ def test_adapter_lowers_when_step_through_builder() -> None:
|
||||
|
||||
|
||||
def test_adapter_lowers_choose_step_through_builder() -> None:
|
||||
draft = WorkflowDraft.model_validate({
|
||||
"name": "choose_example",
|
||||
"input_schema": {},
|
||||
"state_schema": {"fields": {}},
|
||||
"output_schema": {},
|
||||
"start": "pick",
|
||||
"steps": {
|
||||
"pick": {
|
||||
"choose": {
|
||||
"clauses": [
|
||||
{
|
||||
"if": {
|
||||
"op": "gt",
|
||||
"left": {"path": "state.score"},
|
||||
"right": {"value": 80},
|
||||
draft = WorkflowDraft.model_validate(
|
||||
{
|
||||
"name": "choose_example",
|
||||
"input_schema": {},
|
||||
"state_schema": {"fields": {}},
|
||||
"output_schema": {},
|
||||
"start": "pick",
|
||||
"steps": {
|
||||
"pick": {
|
||||
"choose": {
|
||||
"clauses": [
|
||||
{
|
||||
"if": {
|
||||
"op": "gt",
|
||||
"left": {"path": "state.score"},
|
||||
"right": {"value": 80},
|
||||
},
|
||||
"then": "high",
|
||||
},
|
||||
"then": "high",
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"op": "exists",
|
||||
"path": "state.fallback",
|
||||
{
|
||||
"if": {
|
||||
"op": "exists",
|
||||
"path": "state.fallback",
|
||||
},
|
||||
"then": "fallback",
|
||||
},
|
||||
"then": "fallback",
|
||||
},
|
||||
],
|
||||
"default": "__end__",
|
||||
}
|
||||
],
|
||||
"default": "__end__",
|
||||
}
|
||||
},
|
||||
"high": {"use": "demo.high"},
|
||||
"fallback": {"use": "demo.fallback"},
|
||||
},
|
||||
"high": {"use": "demo.high"},
|
||||
"fallback": {"use": "demo.fallback"},
|
||||
},
|
||||
"routes": {
|
||||
"high": {"ok": "__end__"},
|
||||
"fallback": {"ok": "__end__"},
|
||||
},
|
||||
})
|
||||
"routes": {
|
||||
"high": {"ok": "__end__"},
|
||||
"fallback": {"ok": "__end__"},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
workflow = build_workflow_from_draft(draft)
|
||||
condition_ids = [
|
||||
@@ -178,31 +218,33 @@ def test_adapter_lowers_choose_step_through_builder() -> None:
|
||||
|
||||
|
||||
def test_adapter_lowers_match_step_through_builder() -> None:
|
||||
draft = WorkflowDraft.model_validate({
|
||||
"name": "match_example",
|
||||
"input_schema": {},
|
||||
"state_schema": {"fields": {}},
|
||||
"output_schema": {},
|
||||
"start": "match_status",
|
||||
"steps": {
|
||||
"match_status": {
|
||||
"match": {
|
||||
"value": "state.status",
|
||||
"cases": [
|
||||
{"equals": "ready", "then": "ready"},
|
||||
{"equals": "waiting", "then": "waiting"},
|
||||
],
|
||||
"default": "__end__",
|
||||
}
|
||||
draft = WorkflowDraft.model_validate(
|
||||
{
|
||||
"name": "match_example",
|
||||
"input_schema": {},
|
||||
"state_schema": {"fields": {}},
|
||||
"output_schema": {},
|
||||
"start": "match_status",
|
||||
"steps": {
|
||||
"match_status": {
|
||||
"match": {
|
||||
"value": "state.status",
|
||||
"cases": [
|
||||
{"equals": "ready", "then": "ready"},
|
||||
{"equals": "waiting", "then": "waiting"},
|
||||
],
|
||||
"default": "__end__",
|
||||
}
|
||||
},
|
||||
"ready": {"use": "demo.ready"},
|
||||
"waiting": {"use": "demo.waiting"},
|
||||
},
|
||||
"ready": {"use": "demo.ready"},
|
||||
"waiting": {"use": "demo.waiting"},
|
||||
},
|
||||
"routes": {
|
||||
"ready": {"ok": "__end__"},
|
||||
"waiting": {"ok": "__end__"},
|
||||
},
|
||||
})
|
||||
"routes": {
|
||||
"ready": {"ok": "__end__"},
|
||||
"waiting": {"ok": "__end__"},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
workflow = build_workflow_from_draft(draft)
|
||||
condition_ids = [
|
||||
|
||||
Reference in New Issue
Block a user