From 3cafa163c4ca80666e5b7dad6f7a1ff30b545a30 Mon Sep 17 00:00:00 2001 From: "Arthur K." Date: Mon, 2 Mar 2026 05:11:22 +0300 Subject: [PATCH] --- .gitmodules | 6 ++++ README.md | 88 ++++++++++++++++++++++++++++++++++++++++++++++ ai | 1 + compose.yml | 17 +++++++++ data/ai/auth.yml | 7 ++++ data/ai/config.yml | 21 +++++++++++ data/ai/users.yml | 3 ++ megapt | 1 + 8 files changed, 144 insertions(+) create mode 100644 .gitmodules create mode 100644 README.md create mode 160000 ai create mode 100644 compose.yml create mode 100644 data/ai/auth.yml create mode 100644 data/ai/config.yml create mode 100644 data/ai/users.yml create mode 160000 megapt diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..839e91f --- /dev/null +++ b/.gitmodules @@ -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 diff --git a/README.md b/README.md new file mode 100644 index 0000000..f327837 --- /dev/null +++ b/README.md @@ -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`. diff --git a/ai b/ai new file mode 160000 index 0000000..2b416d1 --- /dev/null +++ b/ai @@ -0,0 +1 @@ +Subproject commit 2b416d104d3e81777076fb24bd72e6e3501e071b diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..af3d7c0 --- /dev/null +++ b/compose.yml @@ -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 diff --git a/data/ai/auth.yml b/data/ai/auth.yml new file mode 100644 index 0000000..a937ce5 --- /dev/null +++ b/data/ai/auth.yml @@ -0,0 +1,7 @@ +providers: + kilocode: + token: public + opencode: + token: public + openai: + url: http://megapt/chatgpt/token diff --git a/data/ai/config.yml b/data/ai/config.yml new file mode 100644 index 0000000..c3f9a74 --- /dev/null +++ b/data/ai/config.yml @@ -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 diff --git a/data/ai/users.yml b/data/ai/users.yml new file mode 100644 index 0000000..137d2ff --- /dev/null +++ b/data/ai/users.yml @@ -0,0 +1,3 @@ +users: + example: + token: test diff --git a/megapt b/megapt new file mode 160000 index 0000000..ccd4d82 --- /dev/null +++ b/megapt @@ -0,0 +1 @@ +Subproject commit ccd4d82194c0b2f153757d2db61272cfd8522e6e