Skip to content

Commit 2e14511

Browse files
localai-botmudler
andauthored
docs(blog): add release write-ups for 3.10 through 4.3 (#11330)
The blog has a deep post for 4.8 and a history post that covers the earlier releases at summary altitude, but nothing in between. These five fill that gap in the same shape as what-landed-in-localai-4-8: what the release was for, runnable examples, and the limits that apply. Every endpoint, CLI flag, env var and gallery entry is verified against the matching release tag rather than taken from the release notes. That caught two paths the published 3.10.0 notes got wrong: tracing is /api/traces, not /api/v1/trace, and a stored response is fetched from /v1/responses/:id, not /api/v1/responses/{response_id}. Assisted-by: Claude Code:claude-opus-5[1m] Signed-off-by: Ettore Di Giacinto <mudler@localai.io> Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
1 parent 88fdda6 commit 2e14511

5 files changed

Lines changed: 426 additions & 0 deletions

File tree

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
---
2+
title: "LocalAI 3.10: the Anthropic and Responses APIs, and one image for every GPU"
3+
date: 2026-01-18
4+
author: "Ettore Di Giacinto"
5+
category: "Release"
6+
tags: ["release", "anthropic", "open-responses", "gpu", "moonshine"]
7+
summary: "A /v1/messages endpoint that Claude clients can talk to unchanged, Open Responses compatibility that passes the official acceptance tests, and GPU libraries moved inside the backend containers so one image works on any hardware."
8+
extracss: ["blog.css"]
9+
---
10+
11+
Half the tooling worth using speaks a shape of API that is not OpenAI's. You find a client you like, it talks to Anthropic, and swapping it onto a local model means either rewriting the client or gluing a translation layer in front of it. Same story with the agent frameworks that went all in on the Responses API.
12+
13+
3.10.0 adds both surfaces natively, so the client does not have to know.
14+
15+
## Two more front doors
16+
17+
The Anthropic Messages API is served at `/v1/messages`, and at `/messages` for clients that do not prefix. Tool calling, streaming and non-streaming all work, so `anthropic-sdk-go`, LangChain and anything else built on that shape can be pointed at your instance without a code change.
18+
19+
The Open Responses API is at `/v1/responses`, with `/v1/responses/:id` to fetch one and `/v1/responses/:id/cancel` to stop it. It is stateful: pass a `response_id` and the conversation resumes, set `background: true` and the agent runs asynchronously while you go and do something else, then come back for the result. Streaming covers tools, images and audio.
20+
21+
That one passes the [official acceptance tests](https://www.openresponses.org/compliance), which was the bar I wanted to hit before shipping it.
22+
23+
## One image for every GPU
24+
25+
This is the change most likely to affect you even if you do not care about agents.
26+
27+
GPU libraries (CUDA, ROCm, Vulkan) now live inside the backend containers rather than in the image you pull. There is no longer a CUDA image, a ROCm image and a CPU image to choose between. You pull the image, and acceleration works if the hardware is there! Vulkan arm64 builds are in too.
28+
29+
It is experimental, and I want to be clear about that rather than bury it. It is a real architectural change to how every backend gets its libraries, and there will be hardware combinations we did not hit. If it does not work on yours, please file an issue, that is genuinely the most useful thing you can do for this one.
30+
31+
## Everything else
32+
33+
The backend gallery is system aware now, so it only lists backends your machine can actually run. No more scrolling past MLX entries on a Linux box.
34+
35+
Tool calls stream properly, including partial arguments as `input_json_delta`, and models that emit tools as XML (`<function>...</function>`) get parsed instead of dumping the markup into the message text. Both work across llama.cpp, vLLM and diffusers.
36+
37+
Thinking tags are extracted into a separate `reasoning` field rather than being left in the answer, in both SSE and non-SSE mode. The chat UI shows them under a Thinking tab.
38+
39+
There is a video generation page in the web UI with LTX-2 behind it, doing text-to-video and image-to-video with the usual `fps`, `num_frames` and `guidance_scale` controls.
40+
41+
There is request tracing now. `GET /api/traces` returns in-memory request and response logs, `/api/traces/clear` empties them. It is memory backed and drops old entries past a size cap, so it is for debugging an agent that is misbehaving right now, not for an audit trail.
42+
43+
Two new speech backends. Moonshine is an ONNX transcription engine aimed at low-end hardware, and it is the one to reach for on a Pi or an old laptop. It is quick! Pocket-TTS does lightweight TTS with voice cloning, though the cloning path needs a HuggingFace login and a registered voice model, so it is not quite copy-paste.
44+
45+
## Old hardware, and AMD memory
46+
47+
Two fixes worth calling out because they were silent failures rather than errors.
48+
49+
LocalAI was crashing on Intel CPUs without BMI2 (Sandy Bridge, Ivy Bridge), showing up as an `EOF` during model warmup rather than anything that pointed at the cause. It now falls back to `llama-cpp-fallback` on those chips.
50+
51+
On AMD, used and total VRAM were swapped when parsing `rocm-smi` output, so a dual-Radeon box reported nonsense. `HIP_VISIBLE_DEVICES` is also handled properly now, which matters if you are pinning to the discrete GPU.
52+
53+
## Thanks
54+
55+
Thanks to @richiejp, @majiayu000, @nanoandrew4, @DEVMANISHOFFL, @coffeerunhobby, @rampa3, @Nold360, @jroeber and @Divyanshupandey007 for the work in this cycle.
56+
57+
If the unified GPU backends misbehave on your setup, open an issue with what hardware you are on. And if you are wiring up the Anthropic or Responses endpoints and something does not match the spec, tell me, I would rather hear it from you than find out later.
58+
59+
[Full release notes](https://github.com/mudler/LocalAI/releases/tag/v3.10.0).
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
---
2+
title: "LocalAI 4.0: agents in the core, and a React interface"
3+
date: 2026-03-14
4+
author: "Ettore Di Giacinto"
5+
category: "Release"
6+
tags: ["release", "agents", "agenthub", "mcp", "react", "webrtc"]
7+
summary: "Native agent orchestration with the Agenthub, a rewritten interface with Canvas mode, MCP Apps with tool streaming, and two things removed."
8+
extracss: ["blog.css"]
9+
---
10+
11+
Running an agent locally has meant running two things: an inference server, and a separate orchestrator that talks to it. That is a lot of moving parts for something you wanted to try on a Tuesday evening.
12+
13+
4.0.0 puts the agent side in the core. You create agents, give them memory and skills, connect them to MCP servers, and start and stop them from the same interface you already use for models.
14+
15+
This is a major version bump, so there are two removals near the bottom of this post. Read those before you upgrade.
16+
17+
## Agents, and the Agenthub
18+
19+
Agents are managed through the React interface: create one, wire up MCP servers and skills, connect it to Slack, watch what it is doing through a new Events column in the agents list.
20+
21+
Memory has two options. Hybrid search backed by PostgreSQL if you already run one, or in-memory storage via Chromem if you do not want another service. Skills live in a central database rather than being pasted per agent.
22+
23+
The bit I am most curious to see used is [Agenthub](https://agenthub.localai.io), a community space for sharing agent configurations. You publish one, somebody else imports it into their instance and runs it against their own models on their own hardware!
24+
25+
## The interface is React now
26+
27+
The web interface has been rewritten. The old one had reached the point where adding anything meant fighting it.
28+
29+
Canvas mode is the new thing worth turning on: enable it in chat and code blocks and artifacts the model produces render in a preview pane on the right instead of scrolling past you as text. The System view splits Models and Backends into tabs. Traces render as accordions, which makes a long one readable. And if you try to install a model whose weights exceed your system RAM, you get a warning first rather than a locked-up machine.
30+
31+
## MCP Apps
32+
33+
Client-side MCP support is complete in this release ([#8947](https://github.com/mudler/LocalAI/pull/8947)). You pick which MCP servers to enable for a chat directly in the interface, and their tools get injected into the normal chat with streaming, so there is no separate agent mode to switch into.
34+
35+
If you would rather not have any of it, `LOCALAI_DISABLE_MCP` turns the whole thing off.
36+
37+
## Audio, video, and MLX across machines
38+
39+
WebRTC is wired into the Realtime API and the Talk page ([#8790](https://github.com/mudler/LocalAI/pull/8790)), which is a real improvement for latency over what was there before.
40+
41+
Three new audio backends: fish-speech, ace-step.cpp, and faster-qwen3-tts (CUDA only). TTS gained `sample_rate` support through post-processing, and Qwen TTS handles multiple voices.
42+
43+
There is also an experimental MLX distributed backend for spreading a workload across Apple machines ([#8801](https://github.com/mudler/LocalAI/pull/8801)). It is early, so expect rough edges if you try it.
44+
45+
## Infrastructure
46+
47+
Persistent data now has its own location, separate from configuration. `LOCALAI_DATA_PATH` (or `--data-path`) points at where agents, skills, tasks, jobs and the collection database live, defaulting to `data/` under the base path. If you are mounting volumes, this is the one to look at.
48+
49+
Shell completion scripts generate for bash, zsh and fish. There is dedicated Podman documentation now, including rootless setup.
50+
51+
## Two things are gone
52+
53+
The HuggingFace backend has been removed.
54+
55+
AIO images are dropped. They existed to bundle a preset of models with the runtime, and maintaining them across every hardware variant stopped being worth what they gave people. Use the main images and install models from the gallery.
56+
57+
## One known issue
58+
59+
The `diffusers` backend is not in this release. It failed to build because we exhausted our CI limits, so the previous version is still what you get if you install it.
60+
61+
This is an infrastructure problem, not a code one, and it is the kind of thing that will keep happening to us. If you know anybody at GitHub who could help us get better ARM runners, please reach out, I am not too proud to ask.
62+
63+
## Thanks
64+
65+
Thanks to @richiejp, @nanoandrew4, @Weathercold, @sozercan, @lukasdotcom, @loryanstrant, @bittoby and @attilagyorffy.
66+
67+
If you build an agent worth sharing, put it on the Agenthub. The more the merrier!
68+
69+
[Full release notes](https://github.com/mudler/LocalAI/releases/tag/v4.0.0).
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
---
2+
title: "LocalAI 4.1: more than one box, and more than one user"
3+
date: 2026-04-02
4+
author: "Ettore Di Giacinto"
5+
category: "Release"
6+
tags: ["release", "distributed", "auth", "oidc", "quotas", "fine-tuning"]
7+
summary: "Distributed cluster mode that places requests by real free VRAM, OIDC with per-user API keys and quotas, and LoRA fine-tuning that exports straight to GGUF."
8+
extracss: ["blog.css"]
9+
---
10+
11+
Two problems show up the moment LocalAI stops being a thing you run for yourself.
12+
13+
The first is that you have more than one machine, and only one of them is doing any work. The second is that other people are using your instance, and you have no way to tell who is burning the GPU, or to stop them.
14+
15+
4.1.0 is mostly about those two.
16+
17+
## Running as a cluster
18+
19+
Distributed mode lets you point several nodes at one control plane and stop thinking about which one to call.
20+
21+
Routing orders nodes by available VRAM, so the request lands on the card with room for it. Node groups let you pin models to a subset of the cluster, which is how you keep a heavy diffusion model off the boxes doing embeddings. There is a min/max autoscaler with a reconciler managing node lifecycle, and you can drain a node for maintenance and resume it later through the API instead of pulling it out from under in-flight requests.
22+
23+
Model transfer between nodes goes over S3 or peer to peer, so a model you have already pulled once does not have to come down from the internet again on every node!
24+
25+
The cluster status shows up on the home page.
26+
27+
## Users, keys and quotas
28+
29+
LocalAI ships a multi-user platform now, which is the piece that makes it deployable for a team or a classroom rather than just for you.
30+
31+
- User management from the React interface.
32+
- OIDC/OAuth against your own identity provider (Google, Keycloak, Authentik, whatever you already run).
33+
- Invite mode, so registration is closed unless an admin lets somebody in.
34+
- Per-user API keys.
35+
- Admin impersonation, for when somebody reports a bug you cannot reproduce.
36+
37+
On top of that there is a quota system: set per-user limits and have them enforced, with a usage dashboard broken down per user and a predictive view of where consumption is heading.
38+
39+
## Fine-tuning without leaving the interface
40+
41+
Both of these are experimental. I would use them on something you can afford to throw away.
42+
43+
Fine-tuning uses HuggingFace TRL to train LoRA adapters, exports the result to GGUF automatically, and imports it back into LocalAI so you can serve what you just trained without moving files around by hand. There is a small evals framework included to check whether the thing you trained is actually better.
44+
45+
The quantization backend produces optimized variants of a model on the fly.
46+
47+
## Agents from the terminal
48+
49+
You can run an agent without the server now:
50+
51+
```sh
52+
local-ai agent run <name>
53+
local-ai agent list
54+
```
55+
56+
`run` takes an agent from the pool registry in `pool.json`, or a single-turn `--prompt` if you just want one answer. Tool calls stream in real time, and the interleaved-thinking bug that mangled output when a model reasoned mid-tool-call is fixed.
57+
58+
## The rest of the interface work
59+
60+
The model pipeline editor is visual, so wiring models together no longer means editing YAML. Backend logs can be scoped to a single model rather than reading the whole stream. Studio pages remember past generations, so images and audio you made last week are still there. The model and backend selectors are searchable. Error toasts link straight to the trace that produced them.
61+
62+
## Under the hood
63+
64+
Inference defaults are pulled from Unsloth and applied across all endpoints and gallery models, so models arrive with sane sampling parameters instead of whatever the default happened to be. `min_p` is supported. When native tool-call parsing fails, an iterative fallback parser takes over rather than returning nothing.
65+
66+
Repeated log lines get collapsed. NVIDIA Jetson and Tegra are detected as first-class platforms. SYCL backends auto-disable `mmap`, which was crashing them on Intel GPUs. llama.cpp bundles `libdl`, `librt` and `libpthread` for portability. And the downloader rewrites HuggingFace URIs through `HF_ENDPOINT`, which is the one you need if you are behind a corporate mirror.
67+
68+
## Thanks
69+
70+
Thanks to @richiejp for a large chunk of this cycle, and to @tv42, @walcz-de, @majiayu000 and @ER-EPR.
71+
72+
There is a full setup walkthrough on video if you would rather watch than read: [youtube.com/watch?v=cMVNnlqwfw4](https://www.youtube.com/watch?v=cMVNnlqwfw4).
73+
74+
If you are setting up distributed mode or OIDC and hit a wall, reach out, I am happy to help you get it standing up.
75+
76+
[Full release notes](https://github.com/mudler/LocalAI/releases/tag/v4.1.0).

0 commit comments

Comments
 (0)