Об этом проекте
Liapi — это самостоятельно размещаемый HTTP-сервис, предоставляющий наружу OpenAI-совместимый API и объединяющий внутри несколько вышестоящих сервисов моделей (OpenAI, Claude, OpenRouter, SiliconFlow, Ollama и др.). Проект реализован на Go 1.22+ исключительно на стандартной библиотеке, без сторонних зависимостей; сборка бинарника выполняется одной командой go build.
Ключевые возможности:
- Единая аутентификация: клиентские токены полностью отделены от API-ключей вышестоящих сервисов, поддерживаются три источника — Bearer / x-api-key / ?token=; используется SHA-256-дайджест и сравнение с постоянным временем для защиты от атак по времени; токены маскируются перед записью в журнал.
- Маршрутизация моделей: сортировка по возрастанию priority, внутри группы с одинаковым приоритетом — взвешенный случайный выбор по weight; поддерживаются явные цепочки деградации (fallbacks), точные псевдонимы моделей и правила регулярных псевдонимов (с переопределением параметров).
- Отказоустойчивость: решение о переключении принимается до первого WriteHeader; при 429/5xx автоматически переключается вышестоящий сервис; 4xx (кроме 429) завершается быстро без повторов; поддерживаются внутренние повторы в пределах одного вышестоящего сервиса.
- Потоковая передача: при обнаружении text/event-stream данные копируются построчно с Flush; для потоковой передачи не задаётся жёсткий таймаут — она управляется разрывом соединения клиентом; при отключении клиента чтение вышестоящего сервиса прекращается и соединение освобождается.
- Ограничение скорости: скользящее окно, поддерживается число запросов в минуту на токен и суточная квота по UTC; для устройств возможны индивидуальные переопределения.
- Журналирование и статистика: файлы журнала JSONL + кольцевой буфер в памяти; фиксируются путь, модель, вышестоящий сервис, статус, задержка, расход токенов и оценка стоимости; поддерживается агрегация по вышестоящему сервису/модели/токену/периоду времени, предоставляются задержки P50/P90/P99 и распределение кодов ошибок.
- Проверка работоспособности: фоновый goroutine периодически параллельно опрашивает вышестоящие сервисы; после N последовательных сбоев сервис помечается неработоспособным и автоматически исключается из маршрутизации (можно отключить); при полном отказе всех — возврат ко всему набору.
- Веб-панель управления: статическое SPA на Nuxt 4, встроенное в бинарник через go:embed; поддерживает управление вышестоящими сервисами/токенами/устройствами, горячую перезагрузку конфигурации, запросы к журналам, экспорт статистики, отладочное тестирование.
API управления предоставляет полный CRUD: управление вышестоящими сервисами, управление токенами устройств (хранится только SHA-256-хеш, открытый текст выдаётся лишь один раз), импорт/экспорт конфигурации (поддерживается импорт в формате OneAPI channels), агрегация статистики и экспорт в CSV/JSON, метрики Prometheus. Вход в панель управления выполняется по имени пользователя и паролю (соль + хеш PBKDF2-HMAC-SHA256), выдаётся краткосрочный токен сессии, строго отделённый от токенов бизнес-вызовов. Для файла конфигурации принудительно устанавливаются права 0600 и выполняется проверка при запуске.
Бизнес-API совместим с форматом OpenAI и охватывает /v1/chat/completions, /v1/completions, /v1/embeddings, /v1/models, /v1/messages (нативный формат Claude); клиенту достаточно изменить base_url.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.