Releases: lpalbou/AbstractRuntime
Releases · lpalbou/AbstractRuntime
Release list
AbstractRuntime v0.4.33
Added
- Models and engines for hosts.
config_facadepasses AbstractCore's
models and engines features through to hosts, so the Gateway can offer the
same model browser and engine installer asabstractcore modelsand
abstractcore engineswithout importing AbstractCore:
host_profile,engine_inventory,engine_status,
engine_install_plan,engine_download_url,engine_install,
model_catalog,list_installed_models,model_delete_blockers,
delete_model_artifact,start_model_download_job,host_jobs_list,
host_job,host_job_cancelandconsole_fragment. Payloads are
AbstractCore's own (host_profile_v1,engines_status_v1,
model_catalog_v1,models_installed_v1,host_job_v1). models_engines_support()reports whether the installed AbstractCore has
these modules. It never raises.AbstractCoreTooOld(aNotImplementedError) is raised when the installed
AbstractCore predates these modules. The message names the installed
version and the upgrade command.HostActionRefusedcarries an HTTP status and a structured body for
refusals: engine installs not allowed, unknown engine, an install already
running, a delete blocked by a loaded or shared model. Hosts no longer need
AbstractCore's exception types to tell refusals apart.
Changed
- The AbstractCore floor is now 2.14.0 in the base install and in the
apple
andgpuextras.
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.
AbstractRuntime v0.4.29
Changed
- Raised the AbstractCore dependency floor to
abstractcore>=2.13.38, so Runtime's base and hardware install profiles depend on the released Core utility surface and synchronized Voice-backed capability floor.
AbstractRuntime v0.4.28
Added
- VisualFlow
read_pdfandwrite_pdfdocument nodes.read_pdfextracts PDF text/metadata withpypdf;write_pdfrenders text or Markdown-style content to real PDF bytes withreportlabwhile keeping run state JSON-safe. - Runtime discovery now exposes installed compatible vision adapters through
list_vision_adapters(...). - Runtime's local/remote image and video media helpers now preserve task-specific batch generation controls (
count/n,seeds) and orderedlora_adapters, and VisualFlow media nodes now lower those fields for image generation, image edit, text-to-video, and image-to-video.
Changed
- Runtime's base dependency path no longer selects AbstractCore's media extra or direct PyMuPDF/PyMuPDF4LLM/PyMuPDF-layout packages for VisualFlow PDF support.
- Raised the AbstractCore dependency floor to
abstractcore>=2.13.37, matching the released Core/Vision adapter, batch-generation, and media-parameter contract used by Runtime's base and hardware profiles. - Forwarded newer Core/Vision controls such as
guidance_2,flow_shift, and image-upscaler parameters through generated-media execution. - The per-turn
<runtime_metadata>prompt envelope is now temporal-only by default (local_datetimeplus a country-freedisplay). Full grounding remains in result metadata (runtime_grounding); operators can opt fields back into the prompt withABSTRACTRUNTIME_GROUNDING_PROMPT_FIELDS(comma-separated subset oflocal_datetime,timezone,country,user,display). - When the runtime injects a
<runtime_metadata>envelope into the user turn, it now also appends a stable "RUNTIME GROUNDING" contract to the system prompt explaining that the envelope is machine context, not a user language/locale preference.
Fixed
- Markdown-to-PDF rendering now handles ATX heading levels 1 through 6, preventing deeper headings such as
####from appearing as literal paragraph text in generated PDFs. - VisualFlow LLM Call and Agent structured outputs now expose the parsed object on the
dataoutput while preserving the existing textualresponseoutput. - VisualFlow LLM Call nodes now preserve inline
resp_schema/response_schemaconstraints when provider and model are left on Auto, so Gateway/Core default routing still receives a structured-outputresponse_model. - VisualFlow
answer_userlowering now always emits a stringmessagepayload, preventing connected-but-null message inputs from creating invalidANSWER_USEReffects. - Structured-output field descriptions from JSON Schema now survive Runtime's Pydantic response-model conversion, so providers receive the same guidance authored in Flow.
- Local subprocess media execution now supports task-compatible image edit and image upscaling inputs under the same durable image/video contract as in-process Runtime media calls.
- Runtime now ships its own workspace-path and file-filter helper modules instead of importing unreleased AbstractCore internals, so published installs and release CI use the same supported dependency surface.
AbstractRuntime v0.4.26
Changed
- Moved AbstractCore remote/tool/media capability integration and the MCP worker dependency set into the base
pip install abstractruntimeprofile. Runtime now exposes only the base,abstractruntime[apple], andabstractruntime[gpu]user install profiles for functionality vs. local-inferencer selection; theabstractcore,multimodal,mcp-worker,all-apple, andall-gpuextras are no longer part of the supported install surface. - Raised the AbstractCore dependency floor to
abstractcore>=2.13.31so Runtime installs inherit the latest remote-light media and Wan A14B vision contracts.
Fixed
- Local text-to-video and image-to-video media-only calls now run in an isolated subprocess, preserving progress callbacks while preventing native MLX/Metal video failures from killing the Gateway/Runtime parent process.
AbstractRuntime v0.4.25
Added
- File-backed artifact stores now expose
content_path(...)for hosts that need a stable local path while in-memory stores continue to returnNone.
Changed
- Minimum optional AbstractCore dependency floor is now
abstractcore>=2.13.30(and matchingmultimodal,mcp-worker, and hardware-profile cascade extras), aligning Runtime with the latest Core media/plugin floors and image-to-image residency truth.
Fixed
- Artifact-backed media resolution now preserves image roles such as
sourceandmask, keeping image-edit and image-to-video requests wired correctly through AbstractCore. - Model-residency discovery now treats
image_to_imageas its own vision task and deduplicates shared loaded-model records when task is omitted.
AbstractRuntime v0.4.24
Added
- Runtime now surfaces AbstractCore/AbstractVision video generation through the existing generated-media boundary:
LLM_CALLoutput selectors for{"modality":"video","task":"text_to_video"}and{"modality":"video","task":"image_to_video"}- remote Core Server routing for
/v1/videos/generationsand/v1/videos/edits - durable run-facade helpers
generate_video(...)andimage_to_video(...) - VisualFlow node lowering for
generate_video/text_to_videoandimage_to_video
- Provider progress callbacks are converted into JSON-safe
abstract.progressledger events duringLLM_CALLexecution without persisting Python callback objects.
Changed
- Minimum optional AbstractCore dependency floor is now
abstractcore>=2.13.29(and matchingmultimodal,mcp-worker, and hardware-profile cascade extras), aligning Runtime with Core video endpoints, video residency tasks, and AbstractVision 0.3.16 progress-capable generation. - Runtime docs and AI-readable
llms.txt/llms-full.txtnow document text-to-video, image-to-video, and generated-media progress events.
AbstractRuntime v0.4.23
Added
- Run lifecycle helpers and execution metric surfaces for VisualFlow execution and Gateway run retention workflows.
- Storage deletion primitives for durable run cleanup across the Runtime storage backends.
Changed
- Minimum optional AbstractCore dependency floor is now
abstractcore>=2.13.28(and matchingmultimodal,mcp-worker, and hardware-profile cascade extras), aligning Runtime with the latest Core capability defaults, MLX-Gen catalog, and OmniVoice discovery contracts.
Fixed
- Effect invocation tracing now records generated-media and code-node execution details consistently across local and Gateway-hosted runs.
AbstractRuntime v0.4.22
Changed
- Minimum optional AbstractCore dependency floor is now
abstractcore>=2.13.27(and matchingmultimodal,mcp-worker, and hardware-profile cascade extras), aligning Runtime with the latest Core capability plugin floors and server contracts.
Fixed
- Remote and VisualFlow music generation now fail closed on legacy
backend/music_backendselectors and requireprovider/music_provideras the backend selector, matching AbstractCore Server/v1/audio/musicvalidation. - VisualFlow
generate_musiclowering now preserves booleanstructure_promptvalues (including explicitFalse) in the pending output selector, keeping the Flow/Gateway/Core contract consistent.
AbstractRuntime v0.4.21
Added
- Public model-residency capability discovery on the AbstractCore host facade so hosts can branch on task support before showing warmup controls.
- Durable run-facade support for image edits through
edit_image(...). - First-class VisualFlow lowering for
edit_image/image_to_imageandgenerate_musicmedia nodes. - A focused troubleshooting guide and repository code of conduct in the core documentation set.
Changed
- Minimum optional AbstractCore dependency floor is now
abstractcore>=2.13.25, matching the released Core validation for task-aware text/image/TTS/STT residency. - Remote Runtime media execution now routes image edits through AbstractCore Server
/v1/images/editsor provider-scoped/{provider}/v1/images/edits. - Runtime no longer auto-derives session prompt-cache keys for non-text generated-media or transcription output selectors; explicit
prompt_cache_bindingremains supported. - Local and remote model-residency responses now fail closed unless Core-owned residency truth verifies the loaded state.
- Runtime docs, backlog, ADR links, and AI-readable
llms.txt/llms-full.txtnow reflect the Core-owned residency boundary and current media node support.
Fixed
- Artifact-backed media resolution now preserves image/audio role metadata without failing when content type metadata is absent.