Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e066f20a52 | |||
| bf10326b9a | |||
| 378bde4940 | |||
| ae0137db84 | |||
| f74caadffa | |||
| 93f71ecd3d | |||
| f4afcf7fc1 | |||
| 887b3fa600 |
@@ -18,6 +18,11 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Сброс docker-конфига раннера: битый auth для docker.io
|
||||
# ломает даже анонимные pull базового образа.
|
||||
- name: Clean docker config
|
||||
run: rm -f "$HOME/.docker/config.json"
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
@@ -25,27 +30,28 @@ jobs:
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
# Логин во встроенный registry Gitea.
|
||||
# GITHUB_TOKEN выдаётся автоматически; если понадобится PAT —
|
||||
# создайте секрет GITEA_TOKEN и замените password на него.
|
||||
- name: Login to Gitea container registry
|
||||
# Пароль — существующий секрет GIT_PASSWORD (PAT для аккаунта с 2FA).
|
||||
- name: Login to Gitea Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: git.byte-mate.ru
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
password: ${{ secrets.GIT_PASSWORD }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
# Путь в registry обязателен в нижнем регистре
|
||||
# (github.repository = Coder/photo-editor не подойдёт)
|
||||
tags: |
|
||||
git.byte-mate.ru/${{ github.repository }}:latest
|
||||
git.byte-mate.ru/${{ github.repository }}:${{ github.ref_name }}
|
||||
git.byte-mate.ru/coder/photo-editor:latest
|
||||
git.byte-mate.ru/coder/photo-editor:${{ github.ref_name }}
|
||||
labels: |
|
||||
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
|
||||
|
||||
- name: Summary
|
||||
run: |
|
||||
echo "## Образ собран и опубликован" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Теги: \`git.byte-mate.ru/${{ github.repository }}:latest\`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Теги: \`git.byte-mate.ru/coder/photo-editor:latest\`" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -9,6 +9,7 @@ history/
|
||||
_*
|
||||
*.tmp
|
||||
*.log
|
||||
.bench/
|
||||
|
||||
# ОС / редакторы
|
||||
.DS_Store
|
||||
|
||||
44
README.md
44
README.md
@@ -89,8 +89,15 @@ docker run -d --name kadr-photo-editor -p 3000:3000 ^
|
||||
Требования для работы кнопки:
|
||||
|
||||
1. **Actions включены** на инстансе (уже включены).
|
||||
2. **Зарегистрирован runner** (`act_runner`). Сейчас раннеров нет — без него
|
||||
задания будут висеть в очереди. Регистрация на машине с Docker:
|
||||
2. **Зарегистрирован runner** (`act_runner`) — уже работает
|
||||
(«Runner-10C-32Gb»).
|
||||
3. **Секрет `GIT_PASSWORD`** в репозитории (Settings → Actions → Secrets):
|
||||
Personal Access Token с правами на пакеты. Имена `GITEA_TOKEN` /
|
||||
`GITHUB_TOKEN` зарезервированы Gitea и не создаются.
|
||||
4. Образ публикуется в `git.byte-mate.ru/coder/photo-editor` (теги `latest` и
|
||||
имя ветки; путь в registry обязательно в нижнем регистре).
|
||||
|
||||
Если runner ещё не зарегистрирован:
|
||||
|
||||
```bash
|
||||
# токен регистрации: Администрирование → Actions → Runners → Create new runner
|
||||
@@ -104,3 +111,36 @@ docker run -d --name kadr-photo-editor -p 3000:3000 ^
|
||||
|
||||
3. После регистрации нажмите «Run workflow» — образ соберётся Buildx'ом и
|
||||
уедет в registry.
|
||||
|
||||
## Тест скорости моделей Codex (ветка testing)
|
||||
|
||||
Сервер умеет переопределять модель и уровень рассуждений через переменные
|
||||
окружения (без правки `~/.codex/config.toml`):
|
||||
|
||||
```powershell
|
||||
$env:CODEX_MODEL = "gpt-5.6-luna"; $env:CODEX_REASONING_EFFORT = "low"
|
||||
npm start
|
||||
```
|
||||
|
||||
Проверено на ветке `testing`: одинаковое фото 512×512 и один промпт,
|
||||
замер полного цикла редактирования:
|
||||
|
||||
| Конфигурация | Время | Токены |
|
||||
|---|---|---|
|
||||
| `gpt-5.6-sol` + effort high (как сейчас) | 73.9 s | 15 286 |
|
||||
| `gpt-5.6-sol` + effort low | 61.7 s | 29 760 |
|
||||
| `gpt-5.6-luna` (default medium) | 68.6 s | 52 005 |
|
||||
| `gpt-5.4-mini` (default medium) | 82.1 s | 19 437 |
|
||||
| `gpt-5.2-codex`, `gpt-5.2-codex-mini` | — | недоступны для ChatGPT-аккаунта (API 400) |
|
||||
|
||||
Выводы:
|
||||
|
||||
- **Выбор модели почти не влияет на время** (60–82 s): узкое место — вызов
|
||||
image-модели при редактировании, а не агентная модель.
|
||||
- Единственный заметный выигрыш — `CODEX_REASONING_EFFORT=low` (~17%).
|
||||
Кстати, у `gpt-5.6-sol` low — это значение по умолчанию; в
|
||||
`~/.codex/config.toml` оно переопределено на `high`, поэтому редактирование
|
||||
такое долгое.
|
||||
- Для радикального ускорения нужно уменьшать разрешение исходника для шага
|
||||
редактирования (медленнее при 1200×800, чем при 512×512) — но тогда
|
||||
результат будет меньшего размера.
|
||||
|
||||
34
server.js
34
server.js
@@ -219,22 +219,36 @@ function runCodexEdit(jobDir, inputName, prompt) {
|
||||
const lastMessagePath = path.join(jobDir, "last_message.txt");
|
||||
const outputPath = path.join(jobDir, "output.jpg");
|
||||
|
||||
const args = [
|
||||
"exec",
|
||||
"-C", jobDir,
|
||||
"--skip-git-repo-check",
|
||||
"--ephemeral",
|
||||
"--dangerously-bypass-approvals-and-sandbox"
|
||||
];
|
||||
|
||||
// Переопределение модели и уровня рассуждений (для тестов скорости):
|
||||
// CODEX_MODEL=gpt-5.2-codex-mini CODEX_REASONING_EFFORT=low node server.js
|
||||
if (process.env.CODEX_MODEL) {
|
||||
args.push("-m", process.env.CODEX_MODEL);
|
||||
}
|
||||
|
||||
if (process.env.CODEX_REASONING_EFFORT) {
|
||||
args.push(
|
||||
"-c",
|
||||
`model_reasoning_effort=${process.env.CODEX_REASONING_EFFORT}`
|
||||
);
|
||||
}
|
||||
|
||||
args.push("-i", inputName, "-o", "last_message.txt", "-");
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let child;
|
||||
|
||||
try {
|
||||
child = spawn(
|
||||
CODEX_EXE,
|
||||
[
|
||||
"exec",
|
||||
"-C", jobDir,
|
||||
"--skip-git-repo-check",
|
||||
"--ephemeral",
|
||||
"--dangerously-bypass-approvals-and-sandbox",
|
||||
"-i", inputName,
|
||||
"-o", "last_message.txt",
|
||||
"-"
|
||||
],
|
||||
args,
|
||||
{
|
||||
cwd: jobDir,
|
||||
env: process.env,
|
||||
|
||||
Reference in New Issue
Block a user