Skip to content

AbstractCore v2.31.0

Choose a tag to compare

@github-actions github-actions released this 28 Oct 00:37
· 166 commits to main since this release
22f35af

Added

  • Clone language over HTTP: POST /v1/voice/clone and POST /{provider}/v1/voice/clone take an
    optional language form field (ISO 639-1), passed to the voice plugin (recorded with
    abstractvoice 0.19.0 or later) and to remote AbstractVoice-compatible servers (OpenAI custom
    voices do not take it). Without it, the cloner identifies the language from the transcript.

Fixed

  • Streamed tool calls carry the declared tool name: a native tool whose name is not wire-safe
    (an MCP tool such as mcp::RAGnarok::query, declared to strict APIs as
    mcp_RAGnarok_query_b6ff8949) is returned under its declared name in streaming responses, as it
    already was without streaming, from generate() and agenerate() (including the native async
    paths of providers with their own async client, streaming or not).
    Complete calls and partial deltas keep their ids, indexes and argument fragments. Only names
    declared in the request's tools= are restored; any other name is returned unchanged, with a
    warning, for the host's allowlist to refuse.
  • MLX native lane (mlx-vlm prefix cache, MTP speculation): the per-call snapshot is placed before
    trailing system riders (a host's per-call attachment index), measured in tokens against the
    same request rendered without them. A hybrid model restores only an exact stored prefix, and a
    snapshot that contained the rider matched no later prompt: every tool-loop call of an
    attachment-bearing session re-prefilled the whole conversation (operator run: 10 of 10 calls
    cold, 24,552 tokens at step 10). Replayed on Jundot/Qwen3.8-27B-oQ4e-mtp: steps 2–4 now restore
    8,536 / 11,424 / 14,764 tokens. New telemetry field prompt_cache.snapshot_excludes_tail_tokens.
    The scheduled lane (mlx_batching=True) keeps the default placement (backlog 0858).