Repository navigation
Releases
Releases · batman1m2001-cyber/Operonx
operonx 1.0.0 — state observability, HITL, back-edge loops, LLMOp structured mode
Milestone release: state observability, HITL primitives, LangGraph-style
back-edge loops, structured-output LLMOp, and cleanup of deprecated
surfaces. See MIGRATION.md for the upgrade recipe.
Added — Phase 1 (state)
PARENT.declare(**vars, reducers={...})— shared cells with optional
fan-in reducers. ReplacesPARENT.shared().operonx.reducers—add_messages(LangGraph-compatible id-upsertRemoveMessage/REMOVE_ALL_MESSAGESsentinels),dict_merge,
plus support foroperator.add/operator.or_from stdlib.
Added — Phase 2 (observability + HITL)
Checkpointerprotocol +InMemoryCheckpointerwith per-step delta
storage;get_state(step)folds,get_updates(step)returns delta,
list_steps()enumerates. Zero overhead when no checkpointer bound.MemoryState._write_cellfunnel + write-observer bus. All cell
mutations (includingSCRATCH[k] = v) flow through it.@op(exclude=..., include=..., observe_max=...)— filter observability
at emission source. Polymorphic list-or-dict; mutual-exclusion of
include/exclude.ObserveBudgetExceeded(inheritsBaseException)
as a circuit breaker for runaway generator ops.InterruptOp— HITL suspend/resume viaasyncio.Future.EmitOp— fire-and-forget custom events.engine.stream(mode="updates" | "values" | "frames" | "custom")+
engine.invoke()alias.
Added — Phase 3 (loops)
- Build-time cycle rewrite: write a back-edge inside
@graphand the
Phase 3 pass compiles it into a hidden_GraphLoop. LangGraph-style
agent loops without the visible loop wrapper. @graph(strict_dag=True)opt-out for fail-fast on accidental cycles.
Added — LLMOp structured-output layer
LLMOp.of(fields=..., parser=..., validators=..., max_retries=..., retry_hint=True)— inline parse + validate + error-guided semantic
retry on the same resource (Instructor-style).LLMRefusalErrorandValidatorErrorexception classes; refusal
detected viafinish_reasonin{content_filter, safety}or
non-emptyextras.refusal(structural, not content-heuristic).operonx.providers.parsing— pure functions
(parse_json/parse_xml/parse_yaml,ExtractField,
extract_value_by_path,convert_type,apply_validators,
parse_and_extract) for text-only parsing without an LLM call.
Changed
- Fallback trigger narrowed:
fallback=[...]fires only on refusals,
content-filter blocks, or exhausted transport (SDK-side). Parse /
validator failures NO LONGER trigger fallback — they use
max_retrieson the same resource. - Transport-level retries (429 / 5xx / timeout) are delegated to the
underlying SDK; LLMOp does not add its own transport-retry knob to
avoid double-retry surprises.
Removed (BREAKING)
PARENT.shared(**vars)— usePARENT.declare(**vars).GraphOp.loop(name=..., until=..., **initial_state)constructor —
use a back-edge inside@graphand let the rewrite synthesize the
loop. The_GraphLooptype still exists internally.@graph(until=..., max_iterations=...)decorator surface — replaced
by (a) back-edge for control-flow loops or (b)LLMOp(max_retries=N)
for LLM parse/validate retry.ParserOpclass +ParserTypealias — parsing lives inline in
LLMOp(fields=..., parser=..., validators=...); pure functions for
standalone use are inoperonx.providers.parsing.ask()helper (operonx.providers.ops.ask) — subsumed by
LLMOp.of(fields=..., max_retries=...).
Fixed
- Shared-cell reducer degraded to LWW on nested-ctx writes (from
Phase 3 loop iterations) —_write_cellnow readsoldvia
Cell.__getitem__which handles the shared→DEFAULT_CONTEXT mapping.
v0.7.1
What's Changed
- ci: remove published-smoke workflow by @batman1m2001-cyber in #2
- v0.7.1 — generator dispatch fix, provider auto-register, scheduler precompute by @batman1m2001-cyber in #3
Full Changelog: v0.7.0...v0.7.1