forked from Skull-boy/agent-contracts
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_builder.py
More file actions
65 lines (52 loc) · 2.27 KB
/
Copy pathtest_builder.py
File metadata and controls
65 lines (52 loc) · 2.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
from pathlib import Path
import tempfile
import yaml
from scyvera import Contract, validate_contract
def test_builder_minimal_contract():
contract = Contract(name="Minimal Builder System").set_domain("education")
data = contract.to_dict()
assert data["version"] == 1.1
assert data["system"]["name"] == "Minimal Builder System"
assert data["domain"] == "education"
res = contract.validate()
assert res.valid is True
assert res.errors == ()
def test_builder_full_contract_chaining():
c = (
Contract(
name="Clinical Research Tutor",
purpose="Assists medical students with clinical paper analysis",
system_version="1.0.0",
)
.add_capability("analyze_papers", description="Analyzes medical literature")
.add_resource("clinical_papers", type="pdf_store", access="read")
.add_input("query", type="text", required=True)
.add_output("summary", type="document")
.add_permission("clinical_papers", actions=["read", "search"])
.add_constraint("rate_limit", maximum=30, unit="requests_per_minute")
.add_side_effect("audit_log", resource="clinical_papers")
.add_approval("export_notes", required=True, approver="clinical_instructor")
.add_dependency("pubmed_api", type="api", required=True)
.set_state("session")
.set_recovery("human_escalation")
.set_replay("idempotent")
.set_observability("audit", sinks=["system_log"])
.add_artifact("paper_summarizer", type="model", integrity_required=True)
.set_risk("medium", category="medical_education")
.set_implementation(framework="langgraph", language="python")
)
res = c.validate()
assert res.valid is True
assert res.errors == ()
yaml_str = c.to_yaml()
assert "Clinical Research Tutor" in yaml_str
assert "analyze_papers" in yaml_str
def test_builder_save_and_validate():
c = Contract(name="File Saver Agent", purpose="Tests file saving")
c.add_capability("save_files")
with tempfile.TemporaryDirectory() as tmpdir:
file_path = Path(tmpdir) / "contract.yaml"
saved_path = c.save(file_path)
assert saved_path.exists()
res = validate_contract(saved_path)
assert res.valid is True