# 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`.