Lab 01 — Loop acotado con estados terminales y detección de progreso
Laboratorio ejecutable. Trabájalo en tu entorno local y conserva el resultado como evidencia.
Laboratorio ejecutable. Trabájalo en tu entorno local y conserva el resultado como evidencia.
Ejecución#
python modulo-06-loop-engineering/labs/01_bounded_loop.py
Código fuente#
"""Lab 01 — Loop acotado con estados terminales y detección de progreso.
Ejecución:
python modulo-06-loop-engineering/labs/01_bounded_loop.py
"""
from __future__ import annotations
import json
from dataclasses import asdict
from _loop_core import ActionResult, Budgets, Decision, DurableLoop, LoopState
def planner(state: LoopState) -> Decision:
remaining = int(state.observation or "3")
if remaining == 0:
return Decision(kind="final", answer="All bounded steps completed.")
return Decision(kind="action", action="decrement", arguments={"value": remaining})
def executor(action: str, arguments: dict[str, object]) -> ActionResult:
if action != "decrement":
raise ValueError(f"unknown action: {action}")
value = int(arguments["value"])
next_value = value - 1
return ActionResult(
observation=str(next_value),
progress_marker=f"remaining:{next_value}",
tokens=25,
cost_micros=10,
)
def main() -> None:
loop = DurableLoop(LoopState(run_id="bounded-01", task="Reach zero"), Budgets(max_steps=5))
result = loop.run(planner, executor)
print(json.dumps(asdict(result), ensure_ascii=False, indent=2, default=str))
if __name__ == "__main__":
main()