Phase 4.2+4.3: YAML workflow spec + ACA protocol abstraction (v2026.07.19.10)
CI / gate (push) Has been cancelled

This commit is contained in:
QihuAI Design committed 2026-07-19 20:17:49 +08:00
1 parent c716dab851
commit 79c27795a8
9 files changed
+936 -1

No files matched your search

+92
View File
@@ -0,0 +1,92 @@
"""Phase 4.2+4.3: YAML workflow + ACA protocol registry tests."""
import pytest
from app.core.yaml_workflow import validate_yaml, yaml_to_orchestration, orchestration_to_yaml
# ── YAML workflow tests ──────────────────────────────────────────────────────
VALID_YAML = """
version: "1.0"
name: "Test"
nodes:
- id: a
type: llm
config:
model: auto
system_prompt: "You are a helper."
- id: b
type: llm
- id: c
type: reduce
config:
strategy: concat
edges:
- from: a
to: b
- from: b
to: c
- from: a
to: c
"""
def test_validate_valid():
import yaml
data = yaml.safe_load(VALID_YAML)
r = validate_yaml(data)
assert r["ok"], r["errors"]
assert r["errors"] == []
def test_validate_invalid_type():
import yaml
data = yaml.safe_load("version: '1.0'\nnodes:\n - id: x\n type: bogus")
r = validate_yaml(data)
assert not r["ok"]
assert any("bogus" in e for e in r["errors"])
def test_validate_cycle():
import yaml
data = yaml.safe_load("version: '1.0'\nnodes:\n - id: a\n type: llm\n - id: b\n type: llm\nedges:\n - from: a\n to: b\n - from: b\n to: a")
r = validate_yaml(data)
assert not r["ok"]
assert any("环" in e for e in r["errors"])
def test_yaml_to_json_roundtrip():
import yaml
data = yaml.safe_load(VALID_YAML)
orch = yaml_to_orchestration(data)
assert len(orch["nodes"]) == 3
assert len(orch["edges"]) == 3
# config flattening
node_a = next(n for n in orch["nodes"] if n["id"] == "a")
assert node_a.get("model_id") == "auto"
assert node_a.get("system_prompt") == "You are a helper."
def test_json_to_yaml_to_json():
"""Roundtrip: JSON → YAML obj → JSON should preserve key fields."""
orch_json = {
"nodes": [
{"id": "x", "type": "llm", "model_id": "auto"},
{"id": "y", "type": "reduce", "strategy": "concat"},
],
"edges": [{"from": "x", "to": "y"}],
}
yaml_obj = orchestration_to_yaml(orch_json)
assert yaml_obj["version"] == "1.0"
# config nesting
node_x = next(n for n in yaml_obj["nodes"] if n["id"] == "x")
assert node_x.get("config", {}).get("model") == "auto"
node_y = next(n for n in yaml_obj["nodes"] if n["id"] == "y")
assert node_y.get("config", {}).get("strategy") == "concat"
def test_validate_missing_agent_id():
import yaml
data = yaml.safe_load("version: '1.0'\nnodes:\n - id: x\n type: local\n - id: y\n type: llm\nedges:\n - from: x\n to: y")
r = validate_yaml(data)
assert not r["ok"]
assert any("agent_id" in e for e in r["errors"])