1
0
Fork 0
This commit is contained in:
Arthur K. 2026-03-02 05:11:22 +03:00
commit 3cafa163c4
Signed by: wzray
GPG key ID: B97F30FDC4636357
8 changed files with 144 additions and 0 deletions

6
.gitmodules vendored Normal file
View file

@ -0,0 +1,6 @@
[submodule "ai"]
path = ai
url = https://git.wzray.com/ai/ai
[submodule "megapt"]
path = megapt
url = https://git.wzray.com/ai/megapt

88
README.md Normal file
View file

@ -0,0 +1,88 @@
# lazy
`lazy` - репозиторий-обертка для одновременного запуска двух сервисов:
- `ai` - AI Router (OpenAI-compatible API роутер)
- `megapt` - URL-провайдер токена для `codex-responses` (`/chatgpt/token`)
Сервисы запускаются вместе через `compose.yml`.
## Что здесь находится
- `ai/` - git-submodule с AI Router
- `megapt/` - git-submodule с token URL provider
- `compose.yml` - оркестрация обоих сервисов
- `data/` - персистентные данные контейнеров
## Быстрый старт
1. Инициализируйте submodules:
```bash
git submodule update --init --recursive
```
2. Подготовьте конфиги для роутера в `data/ai/`:
- `data/ai/config.yml`
- `data/ai/auth.yml`
- `data/ai/users.yml`
3. Убедитесь, что в `auth.yml` для провайдера `openai` указан URL на `megapt`:
```yaml
providers:
openai:
url: http://megapt/chatgpt/token
```
4. Поднимите оба сервиса:
```bash
docker compose -f compose.yml up -d --build
```
5. Проверьте, что все работает:
```bash
curl http://127.0.0.1:8239/v1/models
curl http://127.0.0.1:8239/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"openai/gpt-5.3-codex","messages":[{"role":"user","content":"hi"}],"stream":false}'
```
## Как это работает
- `megapt` поднимает HTTP endpoint `GET /chatgpt/token`.
- `ai` при обращении к `codex-responses` берет токен по URL из `auth.yml`.
- Пользователь ходит только в `ai`, который маршрутизирует запросы в нужные апстримы.
## Compose сервисы
`compose.yml` поднимает:
- `ai`
- build: `ai`
- порт: `8239:80`
- volume: `./data/ai:/data`
- restart: `unless-stopped`
- `megapt`
- build: `megapt`
- env: `USAGE_REFRESH_THRESHOLD=85`
- volume: `./data/megapt:/data`
## Полезные команды
```bash
docker compose -f compose.yml ps
docker compose -f compose.yml logs -f ai
docker compose -f compose.yml logs -f megapt
docker compose -f compose.yml down
```
## Примечания
- Секреты и токены не коммитьте в git.
- Директория `data/` должна быть персистентной.
- Если меняете код в submodule, не забудьте закоммитить изменения в самом submodule и обновить его ссылку в `lazy`.

1
ai Submodule

@ -0,0 +1 @@
Subproject commit 2b416d104d3e81777076fb24bd72e6e3501e071b

17
compose.yml Normal file
View file

@ -0,0 +1,17 @@
services:
ai:
build: ai
labels:
traefik.host: ai
traefik.external: true
ports:
- 8239:80
volumes:
- ./data/ai:/data
restart: unless-stopped
megapt:
build: megapt
environment:
USAGE_REFRESH_THRESHOLD: 85
volumes:
- ./data/megapt:/data

7
data/ai/auth.yml Normal file
View file

@ -0,0 +1,7 @@
providers:
kilocode:
token: public
opencode:
token: public
openai:
url: http://megapt/chatgpt/token

21
data/ai/config.yml Normal file
View file

@ -0,0 +1,21 @@
providers:
zai:
url: https://api.z.ai/api/coding/paas/v4
type: openai-completions
whitelist:
- glm-5
kilocode:
url: https://api.kilo.ai/api/openrouter
type: openai-completions
whitelist:
- '*:free'
opencode:
url: https://opencode.ai/zen/v1
type: openai-completions
whitelist:
- '*-free'
openai:
url: https://chatgpt.com/backend-api
type: codex-responses
whitelist:
- gpt-5.3-codex

3
data/ai/users.yml Normal file
View file

@ -0,0 +1,3 @@
users:
example:
token: test

1
megapt Submodule

@ -0,0 +1 @@
Subproject commit ccd4d82194c0b2f153757d2db61272cfd8522e6e