Repository navigation
AbstractCore v2.13.41
2.13.39 and 2.13.40 were not published to PyPI separately; their changes (listed below) ship
with 2.13.41.
Added
- Native MLX runtime. In-process Qwen3.8-27B and Qwen3.8-Flash-Next support on the
mlx
provider with embedded multi-token prediction (MTP), per-request draft depth, bounded native
prefix caching (RAM and optional SSD), image input with MTP on or off, and speculation
telemetry. Opt-in request scheduling (mlx_batching=True) adds continuous batching, bounded
admission and shared model ownership; the AbstractCore server and single-model endpoints admit
scheduled requests concurrently. See native MLX runtime,
speculative decoding and
M5 Max benchmarks. - Core-owned MTP defaults and execution-capability discovery. Fresh configurations use draft
depth 2 on compatible native-MLX models with cached heads; existing settings are preserved.
Applications keep per-request Off/depth overrides, and unsupported strict requests fail
explicitly. Defaults never download weights. - Generation cancel. Pass a
threading.Eventascancel_event=togenerate(): providers
that declaresupports_generation_cancel()stop the running decode (MLX per sampled token and
during mlx-lm prefill; HuggingFace transformers and llama.cpp per step or prefill slice;
OpenAI-compatible, LM Studio, vLLM, OpenRouter, Portkey and Ollama by severing the in-flight
HTTP request). A stopped call raises the new typedGenerationCancelledError, which is never
retried. See generation cancel. - Safe eject and reload.
unload_model()cancels and drains the instance's in-flight calls
first (bounded, 30 s by default); MLX and HuggingFace refuse to free memory under a running
decode. MLX and HuggingFace gainload_model()and reload on demand after an eject. HTTP
providers stay usable afterunload_model(). - Live generation phase and prefill progress.
generate(progress_callback=...)(alias
on_progress=) receives JSON-safe{"kind": "llm", "phase": "prefill" | "generate" | "complete", ...}events with prompt, cached and generated token counts, prefill position and
throughput, TTFT and tokens per second, at most one event per 0.5 s
(ABSTRACTCORE_PROGRESS_MIN_INTERVAL_S). Implemented on MLX and HuggingFace; providers report
support throughsupports_text_progress_events()and HTTP providers emit nothing. - AbstractCore server: a client disconnect cancels HTTP-backed providers as well as the MLX
scheduler, and a cancelled request answers 499. - Host memory and residency visibility (2.13.40).
get_memory_snapshot(), host-wide
sweep_loaded_models(),list_loaded_models()on every provider, per-model memory on
residency records, prompt-cache size stats,POST /acore/prompt_cache/key_meta, and model
locks (POST /acore/models/lock/unlock). - Reasoning effort on local providers (2.13.39).
thinking="low|medium|high|xhigh"is
enforced where the model supports it, with areasoning_effortcompatibility net for
OpenAI-compatible servers. A reasoning effort configured on the text route applies to calls that
name none, and is settable through the server. - Web and document tools.
fetch_urlreturns one canonical structure-preserving markdown
content, can render JavaScript pages, escalates bot-challenge 403s to a real browser, reads
Reddit threads through their feeds, recovers headlines from site feeds when every client is
refused, and reports honest terminal classes (captcha_required,paywall,login_required,
blocked_by_site).browser_probeverifies rendered pages. An SSRF guard validates every hop.
See web and document tools. analyze_mediatool gives text-only agents delegated sight through a vision model.analyze_codecovers 34 languages, marks every place output is withheld, and ends with
runnable recovery steps.- Persistent shell sessions (
tools/shell_session.py,tools/shell_tools.py), schema-aware
tool-argument coercion, tool risk tiers and side-effect tags, and an authoritative builtin-tool
inventory (abstractcore.tools.inventory). - Retry wall-clock budget (
RetryConfig.max_total_wall_clock_s,
create_llm(..., retry_wall_clock_budget_s=...)) and an LLM read-idle timeout that aborts a
stalled stream. - Provider endpoint profiles registered at runtime (
register_runtime_provider_profile) and
create_llm(..., prompt_cache_key=...). - Durable prompt-cache artifacts are gated by engine, tokenizer, model-config and weights
identity, and support q8 KV storage. MLX warm-cache reuse covers Gated-DeltaNet hybrids
(Qwen3.5 / Qwen3.6 / Ornith 1.0). - Machine-level data-home registry (
abstractcore.utils.data_registry). - Model registry: Anthropic generation-5 models, Poolside Laguna, Nemotron 3 Nano 4B and
recent Hugging Face models.
Changed
- Dependencies. MLX and Apple installation profiles require
mlx>=0.32.2,mlx-lm>=0.31.3
andmlx-vlm>=0.7.1,<0.8.0;mlx-vlmis part of every MLX profile, somlx-visionis a
compatibility alias. Media plugin floors:abstractvoice>=0.11.2,abstractvision>=0.3.29,
abstractmusic>=0.1.15. Theembeddings,allandfull-devextras accept NumPy 2 on every
Python version, so they combine with the MLX profiles (mlx-vlm0.7 requires NumPy 2). - Configuration is config-first. A config-set API key supersedes the environment variable;
vision, voice and music behavior on the standalone server is read from configuration. Writing
one field of a capability route keeps the rest of the route. - Native MLX
num_draft_tokenscounts proposals excluding the target seed, including
separate 27B MTP heads. - Native MLX prefix-cache checkpoints default to a 256-token interval with 4 resident
snapshots; theAPC_CHECKPOINT_*environment variables still override them. skim_urluses the same extraction and SSRF guard asfetch_url;time_rangeand
require_inaccept plain-English values.- Unload also frees session caches on in-process providers, and
pinnedon managed
residency records is an alias oflocked.
Fixed
- MLX
stream=Trueno longer raisesTypeErroron the mlx-lm / mlx-vlm lanes. response_model=keeps attached media on MLX; streaming responses carrymedia_deliveredand
media_dropped; images with uncommon extensions are recognized by content.- MLX responses report
finish_reason="length"at the output cap; vision prompt usage includes
expanded image tokens. - Prepared prompt-cache prefixes accept
thinking=and use the same reasoning control as
generation; MLX prepared-prefix forks report a visible#FALLBACKwhen the context diverges. - Structured output on strict-schema backends falls back to prompted generation; MLX and
HuggingFace Outlines output is validated. - Tool-call history with non-string argument values renders on LM Studio and HuggingFace GGUF.
- Anthropic and OpenAI native providers keep
role: "system"messages; Anthropic cache usage is
reported; streamed OpenAI-compatible usage is accounted. - MCP tool names survive strict native endpoints; Ollama
num_ctxis forwarded. execute_commandtimeouts kill the whole process tree and return captured output.edit_filepreserves CRLF line endings and can write literal escape sequences.- Configuration loading never silently regenerates defaults.
- GGUF residency reports weights across split shards;
device.host_in_use_bytesmeasures
accelerator-heap memory.