Об этом проекте

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.