fix(translate): fix batch sizing — use real available input budget, respect job.batch_size, lazy playwright in docker

- _batch_sizer.py: compute per_batch_budget from actual available_input_budget
  (context_window - max_output_tokens) instead of sum of first N rows
- _batch_sizer.py: cap max_rows_hard_cap with job.batch_size (user config)
- _token_budget.py: add available_input_budget and max_output_tokens to return
- preview.py: validate required config fields before preview
- requirements-docker.txt: add playwright pip package (~5 MB)
- backend.entrypoint.sh: lazy playwright install chromium on first start
- build.sh: switch tar to tar.xz (-T0 -9), 5.5x smaller bundles
- README.md: add offline bundle deployment instructions
- playwright.config.js: add testMatch for *.e2e.js files
- frontend: preview tab config validation, i18n keys, translationRun store
This commit is contained in:
2026-05-17 23:32:00 +03:00
parent 6988e63967
commit 9228d071ef
15 changed files with 195 additions and 46 deletions

View File

@@ -109,6 +109,32 @@ ss-tools/
- Docker Compose v2
- 4 GB RAM (для стабильной работы)
### Быстрое развертывание бандла (offline)
```bash
# 1. Загрузить образ из бандла
xz -dc dist/docker/ss-tools.20260517.tar.xz | docker load
# 2. Подготовить пароль для PostgreSQL
export POSTGRES_PASSWORD="my-strong-password"
# 3. Запустить
docker compose -f dist/docker/docker-compose.light.yml up -d
# 4. Создать администратора (первый запуск)
docker exec -it ss-tools-app-1 python src/scripts/create_admin.py \
--username admin --password '<temporary-secret>'
```
Команды для сборки бандла:
```bash
# Легковесный all-in-one (~104 MB)
./build.sh bundle:light v1.0.0
# Полный релиз (backend + frontend + postgres)
./build.sh bundle v1.0.0
```
### Установка и запуск
#### Вариант 1: Docker (рекомендуется)
@@ -255,16 +281,16 @@ cd /home/busya/dev/ss-tools
./build.sh bundle v1.0.0-rc2-docker
# Результат: dist/docker/
# backend.v1.0.0-rc2-docker.tar
# frontend.v1.0.0-rc2-docker.tar
# postgres.v1.0.0-rc2-docker.tar
# backend.v1.0.0-rc2-docker.tar.xz
# frontend.v1.0.0-rc2-docker.tar.xz
# postgres.v1.0.0-rc2-docker.tar.xz
# manifest + sha256sums + docker-compose.enterprise-clean.yml + .env.enterprise-clean.example
# 2. Передать dist/docker/* в изолированный контур
# 3. Импортировать образы локально
docker load -i dist/docker/backend.v1.0.0-rc2-docker.tar
docker load -i dist/docker/frontend.v1.0.0-rc2-docker.tar
docker load -i dist/docker/postgres.v1.0.0-rc2-docker.tar
# 3. Импортировать образы локально (распаковка на лету)
xz -dc dist/docker/backend.v1.0.0-rc2-docker.tar.xz | docker load
xz -dc dist/docker/frontend.v1.0.0-rc2-docker.tar.xz | docker load
xz -dc dist/docker/postgres.v1.0.0-rc2-docker.tar.xz | docker load
# 4. Подготовить env из шаблона
cp dist/docker/.env.enterprise-clean.example .env.enterprise-clean
@@ -278,14 +304,21 @@ cp dist/docker/.env.enterprise-clean.example .env.enterprise-clean
docker compose --env-file .env.enterprise-clean -f dist/docker/docker-compose.enterprise-clean.yml up -d
```
Для легковесного all-in-one образа (без Playwright, <200 MB):
Для легковесного all-in-one образа (без Playwright, **~104 MB** вместо 575 MB):
```bash
# Сборка
./build.sh bundle:light v1.0.0
# Результат:
# dist/docker/ss-tools.v1.0.0.tar
# dist/docker/ss-tools.v1.0.0.tar.xz (×5.5 меньше за счёт xz -9)
# dist/docker/docker-compose.light.yml
# dist/docker/manifest-light.v1.0.0.txt
# dist/docker/sha256sums-light.v1.0.0.txt
# Загрузка и запуск:
xz -dc dist/docker/ss-tools.v1.0.0.tar.xz | docker load
docker compose -f dist/docker/docker-compose.light.yml up
```
Bootstrap администратора выполняется entrypoint-скриптом внутри backend container: