Skip to content

AbstractFramework 0.6.3

Choose a tag to compare

@lpalbou lpalbou released this 29 Sep 22:34
· 237 commits to main since this release

The gpu setting on NVIDIA machines, speech-to-text in the fresh setup, and loaded image models
that are reused. Pins: AbstractGateway 0.7.4, AbstractCore 2.19.2, AbstractRuntime 0.7.3,
AbstractVoice 0.13.2, AbstractVision 0.3.33 and Abstract3D 0.3.2; the gateway's terminal console is
abstractgateway-console 0.11.2, and the browser client AbstractCode web is 0.6.2. Every other
version, and the other terminal clients, are unchanged from 0.6.2.

Added

  • The gpu setting on Linux + NVIDIA, rehearsed on real hardware with this release. On
    Ubuntu 26.04 with a Quadro RTX 5000 (16 GB, driver 595.91.07, CUDA 13.2; 4 vCPU, 26 GB RAM),
    install.sh installed this release's candidate versions from PyPI in 3 min 1 s (AbstractGateway
    0.7.3, AbstractCore 2.19.1, AbstractRuntime 0.7.2, AbstractVoice 0.13.1 and AbstractVision 0.3.32;
    the patch releases listed under Fixed came after this run). The previous
    install had been removed with uninstall.sh --yes --purge and uv's download cache cleared; model
    weights, LM Studio and a Rust toolchain were already on the machine. The Python packages took 39 s
    (about 5.8 GB of wheels), llama.cpp's cu130 build 18 s (726 MB), compiling the two terminal
    clients with cargo 110 s, and the start and health check 5 s. The install added 14.2 GB on disk.
    Its checks reported PyTorch 2.11.0 on CUDA 13.0, llama.cpp 0.3.35 (cu130) with GPU offload and
    Whisper on the GPU. Run again, it reported "already up to date" in 10 s. With Use recommended
    defaults
    and the model weights already downloaded:

    • text with LM Studio (qwen/qwen3.5-9b, Q4_K_M, 6.5 GB on the GPU): the first gateway request
      took 23 s including loading the model, the next 12 s for a 318-token answer (308 of them
      reasoning); from AbstractCore in Python about 41 tokens/s;
    • text-to-speech with Supertonic, on the processor: 1.1 to 1.4 s per sentence (3.2 s for the
      first gateway request);
    • image generation with FLUX.2 [klein] 4B through Diffusers, with model CPU offload (7.8 GB
      peak): 41 s to load the model, then 15 to 16 s per 1024x1024 image. Each gateway image request
      loads the model again, so one request takes 54 to 59 s;
    • speech-to-text did not work as installed; see Known issues below.

    vLLM 0.22.1 installs with the gpu setting but was not validated: it needs a C compiler
    (build-essential) the first time it starts a model, and on GPUs older than compute capability
    8.0 the --attention-backend TRITON_ATTN option. See
    GPU on Linux (NVIDIA).

  • install.sh on Linux + NVIDIA installs llama.cpp's CUDA build that matches PyTorch's CUDA
    (PyPI's PyTorch for Linux is a CUDA 13 build, which needs NVIDIA driver 580 or newer; with an
    older driver PyTorch and llama.cpp run on the processor) and keeps it only when it
    loads and offloads to the GPU; otherwise the CPU build goes back and the summary says why. At the
    end it checks that PyTorch sees the GPU and which device Whisper uses (PyTorch:, GGUF: and
    Voice: summary lines), and warns when no C compiler is found for vLLM.

  • install.ps1 on Windows + NVIDIA picks the GPU stack from nvidia-smi (CUDA 13 with driver
    580 or newer and compute capability 7.5 or newer, CUDA 12 with driver 525 or newer, otherwise the
    CPU), installs PyTorch's CUDA build and llama.cpp's matching prebuilt build (CUDA, then Vulkan,
    then CPU), and ends with GPU checks that replace any part that does not work with one that does.
    The Windows gpu setting is implemented and tested with simulated drivers and wheel-only
    resolves, but it has not yet been validated on real NVIDIA hardware. See
    GPU on Windows (NVIDIA).

  • Live installer progress. Both installers show uv's output as it comes, with a
    still working (… elapsed; last: …) line after 15 seconds of silence, so a multi-GB download no
    longer looks frozen. install.ps1 announces the big downloads before they start.

Changed

  • Only the three install settings in hints. Every install hint across the framework names
    light (pip install -U abstractcore), abstractcore[apple] or abstractcore[gpu], or says that
    a capability is not available on this machine, never a bare package or a plugin's own extra
    (AbstractCore 2.19.1, AbstractGateway 0.7.3, AbstractVoice 0.13.1, AbstractRuntime 0.7.2,
    Abstract3D 0.3.2).
  • Smaller gpu setting. The gpu setting no longer installs MLX-Gen (AbstractVision 0.3.32):
    about 2.1 GB less on Linux, and it installs on Linux distributions with an older glibc.
  • abstractcore[gpu] installs on Windows with wheels only (vLLM is Linux only;
    stable-diffusion.cpp and llama.cpp are left to the installer's prebuilt builds on Windows).
  • Recommendations on NVIDIA machines. Use recommended defaults picks FLUX.2 [klein] 4B
    through Diffusers for image generation on an NVIDIA GPU (it fits a 16 GB card), and the LM Studio
    text download is qwen/qwen3.5-9b@q4_k_m, which LM Studio offers on Linux and Windows.
  • AbstractRuntime depends on AbstractCore's three settings (abstractcore, [apple], [gpu]),
    and openai 2.x is allowed across the stack, so the gpu setting resolves a current vLLM.

Fixed

  • The approval gate shows in every client. When the agent's tool call waits for approval, a
    browser or phone that opens the same conversation later now shows the same Allow / Deny card and
    "Approval needed" as the client that started the turn, instead of "Running a tool" and a Steer box
    (AbstractCode web 0.6.2 with @abstractframework/panel-chat 0.1.20; two-browser end-to-end test).
  • Speech-to-text without an OpenAI key. Transcription runs on the configured input.voice
    route (for example local Whisper) and no longer needs TTS credentials (AbstractCore 2.19.1,
    AbstractVoice 0.13.1).
  • Speech-to-text in the fresh setup. The fresh-install defaults and Use recommended defaults
    set speech input (input.voice: faster-whisper, model base) with text, voice and images, so a
    new install transcribes locally without an OpenAI key (AbstractCore 2.19.2, AbstractGateway
    0.7.4). An install that earlier release defaults seeded gains the route once, when it is empty; a
    route you set yourself is kept. PyAV is held below 19, which faster-whisper 1.2.1 needs to read
    audio files (AbstractVoice 0.13.2).
  • Use recommended defaults saves every route it reports, including on a fresh install right
    after the console read the routes (AbstractCore 2.19.2).
  • Whisper on NVIDIA GPUs. faster-whisper uses CUDA only when CUDA 12 cuBLAS loads (installed
    with the gpu setting on Linux and Windows), and otherwise runs on the CPU with a warning.
  • llama.cpp on CUDA loads without importing PyTorch first on Linux, and a GGUF model too large
    for the GPU at its full context tries smaller contexts on the GPU before falling back to the CPU.
  • Image generation on smaller GPUs. A Diffusers pipeline that does not fit the GPU's free
    memory loads with model CPU offload instead of failing with CUDA out of memory. When even the
    largest component does not fit (for example next to a loaded text model), it falls back to
    sequential CPU offload, which uses much less GPU memory and is slower per step (AbstractVision
    0.3.33). On the Quadro RTX 5000, FLUX.2 [klein] 4B at 768x768 and 4 steps peaked near 1.4 GB and
    took 10.9 to 15.6 s, against 13.4 to 18.5 s with model CPU offload; at about 2.3 s per step
    against 1.5 s, models that run many steps are slower with it.
  • A loaded image model is reused. After Load in the console (or POST /models/load), image
    and video requests for that model run on the loaded pipeline instead of loading the model again
    for each request (AbstractRuntime 0.7.3, AbstractGateway 0.7.4). On the rehearsal machine,
    FLUX.2 [klein] 4B images through the gateway took 17 to 19 s each instead of 54 to 59 s. A model
    that was not loaded still runs each request in its own process.
  • Unloading an image model frees its memory. On CUDA, FLUX.2 [klein] 4B with model CPU offload
    left 16.3 GB held after an unload; it now leaves 0.86 GB (AbstractVision 0.3.33).

Security

  • Email connections verify TLS. AbstractCore's mail tools (list_emails, read_email,
    send_email) and the gateway's email bridge check the server certificate and host name, and refuse
    before login when the check fails; a server signed by a private CA is trusted with the new
    ca_file field of an account (AbstractCore 2.19.2, AbstractGateway 0.7.4).
  • Automations no longer email anyone the model chooses. With the default automatic tool
    approval, message-sending tools are no longer pre-approved: a send_email to your registered
    email runs unattended, any other recipient waits for your approval (AbstractRuntime 0.7.3,
    AbstractGateway 0.7.4).
  • A password_env_var / imap_password_env_var that is not an environment variable name is refused
    instead of being read as the password (AbstractCore 2.19.2, AbstractGateway 0.7.4).

Found in the rehearsal

Found in the rehearsal on the Quadro RTX 5000 described above, which ran the candidate versions. The
Fixed entries above address each one.

  • Speech-to-text failed on a fresh gpu install, for two reasons:

    • Use recommended defaults did not set the speech input route (input.voice). With no route,
      transcription used OpenAI and failed with "OpenAI audio requires OPENAI_API_KEY".
    • PyAV 19.0.0, released on 2026-09-29, removed an option that faster-whisper 1.2.1 uses to read
      audio files. Every transcription through the gateway then failed with open() got an unexpected keyword argument 'metadata_errors'.

    With the route set to faster-whisper base by hand and PyAV 18, faster-whisper transcribed on the
    GPU with no OpenAI key: 1.0 to 2.3 s per gateway request, and 0.3 GB of GPU memory.

  • An image next to a loaded text model ran out of GPU memory on a 16 GB card. LM Studio's
    qwen/qwen3.5-9b keeps 6.5 GB on the GPU while it is loaded. FLUX.2 [klein] needed 7.8 GB even
    with model CPU offload, so the image request failed with CUDA out of memory after three attempts
    (about 2.5 minutes). With the text model unloaded (lms unload --all, or the console's model
    list), the same request worked. In this case AbstractVision 0.3.33 falls back to sequential CPU
    offload (see Fixed above).

  • Use recommended defaults could skip the image route on a fresh install. On an NVIDIA machine,
    if the button was used within a few seconds of the console reading the routes, it could report the
    image route as already set without saving it. Using it again saved it.