LM‑Proxy — миниатюрный, но мощный прокси‑сервер (TypeScript + Deno), который превращает любой OpenAI‑совместимый клиент (например, LM Studio) в универсальный «переводчик» для других LLM‑провайдеров. Скомпилированный бинарник весит всего несколько мегабайт — никакого Node, никаких зависимостей, только один файл.
- Полная совместимость с OpenAI API — перехватывает маршруты
/v1/chat/completions
,/v1/models
и автоматически перенаправляет устаревшие пути (/api/*
,/v0/*
) на корректные эндпоинты. - Умная трансформация запросов и ответов — удаляет неподдерживаемые поля (
keep_alive
, пустыеtools
, неверныеmax_tokens
) и добавляетsystem_fingerprint
, чтобы LM Studio корректно отображал модель. - Один статический бинарник —
deno compile
собирает проект в автономный исполняемый файл; запуск осуществляется буквально «из коробки». - Микро‑Docker‑образ < 8 МБ — многоступенчатая сборка копирует готовый бинарник в
bitnami/minideb
, минимизируя размер контейнера. - .env‑конфигурация — достаточно задать
AI_BASE_URL
иAI_TOKEN
; пример файла находится в репозитории.
# 1. Клонируем репозиторий
git clone https://github.com/zxcnoname666/lm-proxy
cd lm-proxy
# 2. Настраиваем окружение
cp .env.example .env # правим URL и токен
# 3. Запускаем
deno run --allow-env --allow-net main.ts
# По умолчанию LM‑Proxy слушает порт 8000
docker build -t lm-proxy .
docker run -d --env-file .env -p 8080:8000 lm-proxy
⚙️ Переменная
PORT
позволяет изменить порт внутри контейнера (по умолчанию 8000).
- Откройте Settings → Providers → OpenAI compatible;
- В поле API Base укажите
http://localhost:8000
(или другой адрес, если меняли порт); - API Key впишите любую строку — LM Studio проверяет лишь наличие токена;
- Выберите модель из списка — прокси автоматически преобразует JSON
/v1/models
в формат, понятный LM Studio.
graph LR
A[LM Studio / curl] -->|OpenAI JSON| B(LM‑Proxy)
B -->|Переписанный запрос + Bearer| C[LLM Backend\nAI_BASE_URL]
C -->|Stream| B -->|Изменённый поток| A
- Маршрутизация — убирает префиксы
/api
и/v0
. - Авторизация — добавляет
Authorization: Bearer <AI_TOKEN>
. - Трансформация SSE‑потока — подставляет fingerprint модели для корректного рендера.
Переменная | Обязательно | Значение по умолчанию | Описание |
---|---|---|---|
AI_BASE_URL |
✔️ | — | URL LLM‑провайдера (например, https://api.endpoints.ai ) |
AI_TOKEN |
✔️ | — | Bearer‑токен для доступа к API |
PORT |
❌ | 8000 |
Локальный порт LM‑Proxy |
Скрипт | Что делает |
---|---|
deno task dev |
Запускает сервер с авто‑перезагрузкой |
Проект распространяется под лицензией MIT. Буду рад звёздочке ⭐️ или PR‑у с улучшениями!