Add basic version: SemIf decision engine, urgency queue, skill tree, skill loop, decision log, dream pass, CLI

This commit is contained in:
semif-agent
2026-09-23 03:01:45 -05:00
commit 4e0e0534c4
21 changed files with 1629 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
from semif_agent.decisions import DecisionRequest, DecisionResult, Option, Request
def test_to_semif_row_shape():
request = DecisionRequest(
state="some state",
question="some question?",
options=[Option("a", "A."), Option("b", "B.")],
id="abc",
)
row = request.to_semif_row()
assert row["id"] == "abc"
assert row["state"] == "some state"
assert row["question"] == "some question?"
assert row["options"] == [
{"id": "a", "description": "A."},
{"id": "b", "description": "B."},
]
def test_result_selected_and_probs():
request = DecisionRequest(
state="s",
question="q",
options=[Option("a", "A."), Option("b", "B.")],
)
result = DecisionResult(
request=request, option_ids=["a", "b"], probabilities=[0.3, 0.7]
)
assert result.selected == "b"
assert result.probs == {"a": 0.3, "b": 0.7}
assert result.prob("a") == 0.3
def test_request_requeue_preserves_state():
original = Request(text="t", priority=0.7)
original.resume["from_skill"] = "email.compose"
updated = original.copy_for_requeue()
assert updated.id == original.id
assert updated.priority == original.priority
assert updated.resume["from_skill"] == "email.compose"
assert updated.reentries == original.reentries + 1