Я создал репозиторий LocalAI 18 марта 2023 года. Это был совместимый с OpenAI HTTP API поверх llama.cpp, и в этом заключалась вся идея: изменить один URL в уже написанном коде, и ответы начинают поступать с вашего собственного ноутбука, а не из чьего-то дата-центра.
Три года спустя 224 человека внесли в него свой код в рамках 133 релизов. За это время проект набрал 48 042 звезды, что до сих пор меня удивляет. Сейчас он запускает 73 различных бэкенда, вы можете установить любую из 1585 моделей из галереи, не написав ни строчки на Python, а восемнадцать движков, выполняющих реальную работу, — это порты на C или C++, которые мы сели и написали сами.
Ни одно из этих чисел не округлено. Вы можете проверить каждое из них прямо сейчас в репозитории или через API GitHub, а те, что указаны ниже в этой статье, взяты из примечаний к релизам.
Звезды на GitHub, с 31.03.2023 по 31.07.2026
48 042 звезды и четыре изменения на этом пути
Данные взяты из API звезд GitHub, который фиксирует время получения каждой звезды, так что это измеренная кривая, а не ее перерисовка. Наведите курсор или перетащите его по линии, чтобы посмотреть любую дату. API прекращает пагинацию на 40 000 элементов, поэтому все данные до 24.12.2025 измерены, а пунктирный хвост до сегодняшнего итога представляет собой прямую линию между двумя известными точками, а не данные.
Четыре отметки на графике соответствуют четырем приведенным ниже решениям, и каждое из них можно увидеть по изменению наклона линии.
Ниже описаны четыре решения, которые изменили облик проекта. Полный список функций доступен в релизах.
С 2023 по 2024 год: API поверх llama.cpp
Одно правило не менялось с самого первого коммита: если функция работает только на GPU, она не попадает в основную ветку. Для каждой модальности предусмотрен путь выполнения на CPU, и этот путь тестируется. У большинства людей нет свободного A100, а те, у кого он есть, все равно хотят разрабатывать прямо в поезде.
Первые два года ушли на расширение того, что находилось за API, с сохранением этого ограничения: whisper.cpp для транскрипции, stable-diffusion для изображений, эмбеддинги, затем ранжирование, а также ограниченные грамматики и интерфейс вызова функций (function calling). Список совместимости с API рос параллельно, и позже в него были добавлены форматы Anthropic и ElevenLabs наряду с OpenAI, чтобы один и тот тот же сервер отвечал любому клиенту, который уже используется у человека.
Цена за всю эту универсальность проявилась в размере бинарного файла. Все было скомпилировано внутри, поэтому вы скачивали CUDA-ядра независимо от того, был у вас GPU или нет, среду выполнения Python, хотите вы этого или нет, и модели изображений, когда вам требовался только чат. Сборка из исходников означала сборку всего подряд. Это стало вызывать неловкость.
Июль 2025 года: ядро становится компактным
Каждый бэкенд был вынесен за пределы основного бинарного файла в v3.2.0. Бэкенды стали отдельными OCI-образами, которые подгружаются по требованию при первом запросе модели к одному из них, а небольшое ядро отвечает за работу с API и управление процессами.
Вы устанавливаете один продукт, и он остается компактным. Запросите модель GGUF — загружается llama-cpp. Запросите транскрипцию — загружается whisper или parakeet. Ничего лишнего не скачивается, и машина, обслуживающая только одну модель, никогда не загружает остальные шестьдесят девять бэкендов.
Все, что последовало за этим, зависело от одного этого изменения. Добавление бэкенда перестало означать увеличение веса для всех пользователей, поэтому вопрос «стоит ли поддерживать этот движок» перестал быть спором о размере загрузки и снова свелся к вопросу о том, насколько хорош сам движок. Это также причина, по которой мы можем позволить себе поддерживать восемнадцать собственных движков, о чем пойдет речь далее.
Март 2026 года: агенты и новый интерфейс
В LocalAI 4.0.0 была добавлена нативная агентная оркестрация через сообщество Agenthub, поэтому агенты с возможностью использования инструментов, RAG, навыков и потоковой передачи теперь работают внутри того же сервера, а не в виде отдельного стека, который нужно настраивать самостоятельно.
Веб-интерфейс был одновременно переписан на React и получил режим Canvas, приложения MCP и клиентские инструменты с потоковой передачей вызовов (#8947), а также звук реального времени через WebRTC (#8790). В MLX появился распределенный режим (#8801).
Путь обработки аудио в реальном времени изменил то, что люди создают с его помощью. Речь на входе, вызовы инструментов посреди процесса, речь на выходе по протоколу рация-ответ (WebRTC) — все это работает настолько быстро, что ощущается как разговор, а не как общение по рации. Функция появилась как Realtime API в феврале 2026 года (#6245), и переписанный интерфейс наконец дал ей визуальное воплощение.
Апрель 2026 года: превращение в кластер
В LocalAI 4.1.0 добавлен режим распределенного кластера. Вы запускаете воркер на другой машине, он сообщает свое аппаратное обеспечение и бэкенды, которые может запускать, и присоединяется к пулу. Запросы распределяются планировщиком, который знает реальный объем свободной видеопамяти, а не статическое предположение, при этом пул масштабируется автоматически.
Этот же релиз превратил LocalAI в систему, которую можно использовать более чем одному пользователю: OIDC и ключи API, квоты для каждого пользователя с предиктивной аналитикой, дообучение (fine-ведении) с помощью TRL прямо в интерфейсе с экспортом в GGUF, бэкенд квантования «на лету» и визуальный редактор пайплайнов.
В майском релизе 4.3.0 появились маршрутизация реплик на уровне запросов, привязка использования к ключам API и пользователям (#9920), подписание бэкенд-образов OCI через cosign без ключей (#9823), а также кэширование промптов llama.cpp по умолчанию (#9925), что сокращает время обработки повторяющихся системных промптов с минут до секунд. В июне маршрутизация с учетом префиксного кэша (#10071) начала отправлять запрос реплике, в которой уже содержится соответствующий префиксный кэш, а не наименее загруженному узлу.
Распределенный режим также стал источником большинства самых сложных багов. Только в цикле разработки 4.8.0 мы исправили сборщик мусора, который с энтузиазмом удалял строки для живых и занятых бэкендов, заглушки фронтенда, пережившие стоящие за ними реплики, а также счетчики активных запросов (in_flight), которые давали утечку и удерживали видеопамять от освобождения. Запуск на разных машинах выявляет такие сбои, которые единый процесс никогда не покажет, причем выявляет их прямо в продакшене.
Май и июнь 2026 года: зрение и слух
В LocalAI 4.2.0 добавлены распознавание голоса (#9500), распознавание лиц с проверкой на «живость» (anti-spoofing liveness) (#9480) и диаризация спикеров, а также генерация видео (#9420), готовый API Ollama (#9284) и одиннадцать новых бэкендов.
Модель чата знает только то, что ей напечатал пользователь. Распознавание расширяет эти возможности: кто находится в комнате, кто говорит, является ли лицо перед камерой живым человеком или фотографией, которую кто-то держит. Все это работает на том же компьютере, что и модель, что для биометрии является единственным вариантом, который большинство людей может честно развернуть на практике.
В июне эти две возможности перестали зависеть от Python. В voice-detect.cpp и face-detect.cpp бэкенды распознавания речи и insightface на Python были заменены на движки C++ и ggml, написанные с нуля, с автономными весами GGUF, без использования onnxruntime при инференсе и с побитовой идентичностью по сравнению с замененными эталонами (#10441).
Середина 2026 года: восемнадцать собственных движков
В файле README теперь есть таблица под названием «Бэкенды, созданные нами». В ней перечислено восемнадцать нативных движков на C и C++, а также apex-quant — наш рецепт квантования для моделей «смесь экспертов» (mixture-of-experts).
Каждый из них существует по одной из трех причин. Некоторые заменяют зависимость Python, которая оказалась слишком тяжелой для поставки, например, insightface, speaker-recognition или сам vLLM. Другие переносят модель, которую еще никто не написал на C++: Depth Anything 3, LocateAnything, CED audio tagging, TRELLIS.2. А третьи заполняют пробел в том, что вообще может делать локальный ассистент, например, эхоподавление (acoustic echo cancellation) — неприметная вещь, которая не дает голосовому циклу бесконечно транскрибировать собственный голос.
Рецепт каждый раз один и тот же. Модель появляется в виде PyTorch или ONNX плюс пакет Python. Мы портируем граф в ggml, преобразуем веса в один файл GGUF и проверяем каждый компонент по эталонным тензорам, выгруженным из оригинала. Только после того, как все начинает работать правильно, мы позволяем себе посмотреть на часы. Затем LocalAI загружает общую библиотеку через purego поверх плоского C ABI, поэтому на пути обслуживания нет никаких процессов Python.
Самый свежий пример — vllm.cpp, порт архитектуры обслуживания V1 от vLLM на C++20 с постраничным KV-кэшем (paged KV cache), непрерывным батчингом и кэшированием префиксов, который вышел в качестве бэкенда vllm-cpp в версии 4.8.0.
Текущее положение дел
По-прежнему под лицензией MIT, по-прежнему общественный проект. Свой код внесли 224 человека, а README переведен на восемь языков, поскольку пользователи проекта находятся по всему миру. График участников показывает, кто на самом деле это построил, и это не я.
Если вы хотите что-то добавить, бэкенды и элементы галереи — это те два места, куда проще всего внести первый вклад. В файле .agents/adding-backends.md есть пошаговый контрольный список для нового бэкенда, а элемент галереи — это просто блок YAML. Заходите поздороваться в Discord, если застрянете.







