AbstractRuntime v0.4.32
This release also contains everything listed under 0.4.31, which was never
published on its own.
Added
- Stop reaches the running effect.
Runtime.cancel_run(...)now signals the
effect that is executing for the run (and for its in-flight descendants), not
only the stored status. TheLLM_CALLhandler passes the signal to
AbstractCore ascancel_event=, so a local provider stops within one token,
and the remote client closes its request to the AbstractCore server, which
treats the disconnect as a cancel. The stopped attempt is recorded as
cancelled(newStepStatus.CANCELLED,EffectOutcome.cancelled) with
cancelled_by,reasonand timing fields, is never retried, and nothing
after it runs. Remaining calls of a tool batch are reported as not started.
cancel_run(..., cancelled_by=...)is a new keyword (default"api"). core/effect_cancellation.py:inflight_effects()lists executing effects;
request_model_effects_cancel(provider, model)stops the effects using a
model;kill_inflight_effect(step_id, killed_by=...)is an in-process hard
stop for a call that ignores its cancel event.- Model eject stops its calls first. Local
unload_model_residency
cancels the effects using the unloaded model before unloading it, and the
ledger recordscancelled_by: "model_eject"with the model named. - Speculation (MTP) controls.
LLM_CALL.params.speculation(False,
True, or a Core speculation object) and boolean or stringthinkingare
forwarded by local and remote clients._runtime.speculationsets a
run-wide preference inherited by subworkflows, Agent loops, delegated
children and structured-output follow-up calls; an explicitFalsestays
Off across every boundary. VisualFlow LLM Call and Agent nodes accept a
speculationinput. Scoped AbstractCore defaults reach provider
construction, andconfig_facade.normalize_speculation_control()validates
host values with Core's vocabulary. - Native MLX execution controls. Local clients admit concurrent calls only
when the loaded MLX instance advertises safe scheduling; other instances
stay serialized through streamed completion. Remote results expose Core's
execution,speculation,performanceandprompt_cachemetadata.
Newget_execution_capabilities(model_name=None, provider=None)on the
clients and the discovery facade asks the actual execution host without
loading a model. - Text phase progress. Every
LLM_CALLis offered the durable progress
channel. Providers that report prefill/generation phases produce
abstract.progressledger events withkind: "llm"(phase,
prompt_tokens,cached_tokens,fed_tokens,generated_tokens,
ttft_s,tokens_per_second). The callback travels beside the effect
(core/progress_channel.py), soeffect.payloadstays JSON-serializable. - Run-tree tool ceiling. An explicit
allowed_toolslist in_runtime, in
a child run, or in a tool payload is intersected across the run tree
(core/tool_scope.py). Approval policy can remove a prompt but never grant
a tool outside the ceiling; malformed lists and broken ancestry fail closed. Runtime.tick(..., step_gate=callable)lets a host pause a run at the next
step boundary; the run staysRUNNINGand a later tick continues.Runtime.set_default_provider_model(...)and the pooled client's
set_default_provider_model(...)/set_capability_defaults(...)re-point
the default provider/model without a restart.abstractruntime.turn_grounding:stamp_user_turn_grounding()writes the
grounding envelope once into the stored user turn, so each turn's prompt is
a byte prefix of the next one and provider prompt caches survive across
turns. Session replay returns the stored bytes.JsonFileRunStore.list_event_waiters(...)/list_event_waiters_by_prefix(...)
(optionalEventWaiterQueryableRunStoreprotocol, also forwarded by
OffloadingRunStore).emit_eventuses this index instead of scanning
every run file.- The model receives a description of its workspace scope (default directory,
access mode, extra roots and exclusions), and out-of-scope path errors list
the authorized roots. - VisualFlow: inline pin expressions (
node.data.pinExpressions, sandboxed
with RestrictedPython),continueOnErroron effect nodes, awrite_chart
node, awrite_docxnode, image embedding and branded exports in PDF/DOCX
renderers, andshq/text_ofsandbox helpers. abstractruntime.__version__.- The configured reasoning effort on AbstractCore's text capability route is
applied when a call names nothinking. config_facade.read_email_settings()andread_maintenance_settings().- LLM results carry
route(the provider, model andbase_urlthat actually
served the call, with amismatchflag). - In-process
on_tokenstreaming callbacks (set_on_token) on local and
pooled clients;read_idle_timeout_sfor LLM calls. WAIT_EVENTaccepts a deadline;_runtime.wait_until_streakcounts
consecutiveWAIT_UNTILparks.RuntimeHealthcounters, bounded run-vars growth for long-running runs,
an indexed idempotency lookup, fair scheduling across several run stores
(scheduler/multi_store.py), a steer sidecar store, and durable session
conversation replay.history_bundle: adetail="replay"profile and in-bandwarnings[]when a
bundle cannot be complete.- Entity runtime (
abstractruntime.identity): the per-entity home runtime,
chat driver, visit workflow, life loop, diary and memory effects
(MEMORY_CONSOLIDATE,MEMORY_PROBE,MEMORY_TEND,LIFE_QUERY,
ENTITY_TOOLS_QUERY,ENTITY_TOOLS_EXECUTE), phase graph and entity tools.
Seedocs/entity-runtime.md. - Tool surfaces:
browser_probein thewebtoolset (asks for approval by
default), a camera toolset registered whenabstractcamerais installed,
agit_read_only@v1approval refiner, and agora hub tools.
Changed
- Dependency floors:
abstractcore[remote,tools,vision,voice,audio,music]>=2.13.41,
abstractcore[all-apple]>=2.13.41(appleextra),
abstractcore[all-gpu]>=2.13.41(gpuextra),AbstractMemory>=0.3.0,
abstractsemantics>=0.0.5.RestrictedPython>=7.0andpyyaml>=6.0are
declared dependencies. - The
gpuextra's setuptools floor is>=77.0.3(was>=80.10.2), which
vLLM'ssetuptools<80requirement can satisfy. - Migration: with RestrictedPython installed, VisualFlow Code nodes always run
under its policy. Augmented assignment on subscripts (d["k"] += 1) is
refused; rewrite it as read, modify, write. - The default iteration budget (
RuntimeConfig.max_iterationsand the
Agent-node fallback) is 20. Workflow-declared values still win. - LLM calls default to
read_idle_timeout_s=300: a stream that delivers
nothing for 5 minutes is aborted. Passread_idle_timeout_s: Nonein
llm_kwargsto disable it. - Tool approval waits use a unique, replay-stable key per approval
(tool_approval:{run_id}:{node_id}:{effect_identity}). Runs already
waiting on an older key can still be approved. - A connected VisualFlow node of an unknown type fails compilation with
UnknownNodeTypeErrorinstead of running as a no-op. - Terminal ledger records are slimmer, the offloading ledger store is used by
the durable factories, and hot-path store reads avoid full-document parses. - Deterministic LLM client errors and prompt-cache binding failures are not
retried.
Fixed
- A per-call provider pin reaches the provider it names: pooled clients no
longer hand the default endpoint'sbase_url/api_keyto other providers. - Catalog discovery works when the default text client cannot be built.
- A fresh install with no provider configured constructs its runtime; calls
without a provider fail with a message naming what to configure. - The session prompt-cache prefix is prepared with the
thinkingvalue the
call generates with, and prompt-only calls under a runtime-derived key no
longer append to their own cache. - The remote client forwards
thinking; streamed reasoning keeps the complete
final text. - Effect-only paths into a VisualFlow End node no longer copy runtime
bookkeeping into the result. - Visual
llm_callnodes forward provider and model independently. - Native tool calls are kept by the chat driver.
JsonlCommandStore.appendfsyncs before returning.- Run-output offload reduces the largest children first, so a small answer
stays inline next to a large scratchpad. - The JSON run store cache is LRU-bounded; hash-chained ledgers no longer fork
under concurrent handles. - Entity-lane
execute_commandkills its whole process tree on timeout. - PDF export renders scientific and typographic glyphs.