8 KiB
| title | date | tags | |||
|---|---|---|---|---|---|
| Video Accessibility — Next Session Prompt | 2026-04-30 |
|
Next Session Start Prompt
[!important] Обов'язково прочитати перед початком Цей файл — єдине джерело правди для наступної сесії. Читати повністю.
Контекст проекту
AI SaaS платформа для генерації accessibility-матеріалів (CC, AD, SDH) з відео.
- Директорія:
/Users/ai_leed/Documents/Projects/Oliver/video-accessibility - Гілка:
main - Сервер:
optical-dev(Docker Compose) - Останній коміт:
3bed598— fix(glossary+jobs): debug logging + AllJobs filter fix
Що зроблено СЬОГОДНІ (2026-04-30)
Виправлені баги (всі в main)
| # | Файл | Проблема | Рішення |
|---|---|---|---|
| 1 | tasks/translate_and_synthesize.py |
UnboundLocalError: job_doc на рядку ~976 |
Перемістив find_one(job_id) перед gcs_path() |
| 2 | migrations/scripts/migration_2026-04-30-000002_fix_status_enum.py |
MongoDB $jsonSchema відхиляв статус cancelled |
Новая міграція з firstBatch патерном + повний список статусів |
| 3 | migrations/run.py |
Файл не існував | Створив runner з connect_to_mongo() |
| 4 | services/gemini.py |
Стара модель gemini-2.5-pro |
Оновлено до gemini-3.1-pro-preview |
| 5 | core/config.py + tasks/tts_synthesis.py |
TTS flash модель застаріла | Flash → gemini-3.1-flash-tts-preview, Pro залишився gemini-2.5-pro-preview-tts |
| 6 | routes/Dashboard.tsx |
Processing counter показував 0 | Додані translating, tts_generating, rendering_video, rendering_qc до підрахунку |
| 7 | routes/jobs/JobsList.tsx |
All Jobs показував "no jobs" при дефолтних фільтрах | useEffect тепер завжди синхронізує statusFilter з URL-параметром (очищає, якщо param відсутній) |
| 8 | services/glossary_service.py |
Glossary не застосовувалась, помилка ховалась | Детальний дебаг-логінг + guard для source_term_lower=None + guard для target_locale=None |
На сервері виконано вручну
# optical-dev
docker compose up -d --build tts-worker # TTS deadlock: 0/15 → фіксовано
python -m app.migrations.run # Applied migration_2026-04-30-000002
Статус тестового джобу Test5 (69f3b6d2cde5f3709e55301e)
- TTS: EN ✓ (15/15), DE-DE ✓ (13/13), FR-CA ✓ (15/15)
- Рендер відео: в процесі на момент завершення сесії
- Стан:
tts_generating→ очікується перехід уrendering_qcабоpending_final_review
Що НЕ вирішено — TODO на наступну сесію
1. Glossary — причина не знайдена (ПРІОРИТЕТ)
Симптом: Glossary не застосовується навіть коли джоб створений в правильному проекті з активним словником.
Що зробили: Додали детальний логінг в get_glossary_block_for_job. Тепер у воркер-логах буде видно ТОЧНО де повертається "".
Наступний крок:
- Задеплоїти нові зміни (
git pull+docker compose up -d --build worker api) - Запустити новий тест-джоб в проекті зі словником
- Перевірити логи воркера:
docker compose logs -f worker | grep -i glossary - Буде один з варіантів:
Glossary skip job=X: no project_id→ джоб не прив'язаний до проектуGlossary skip job=X: project ABC not found→project_idне матчить жодного проекту (тип?)Glossary skip job=X: no active glossary for client Y→ словник для цього клієнта не активнийGlossary skip job=X: no source text→ відсутній_glossary_source_text(VTT порожній?)Glossary lookup failed ... traceback→ виняток з повним стеком
2. Деплой фронтенду (ПРІОРИТЕТ)
Зміни в Dashboard.tsx (Processing counter) і JobsList.tsx (AllJobs filter) ще не задеплоєні на сервер.
# На optical-dev:
cd /opt/projects/video-accessibility
git pull
docker compose up -d --build api
# або якщо є окремий фронтенд-білд:
./scripts/build-frontend.sh
3. Перевірити фінальний стан Test5
Перевірити чи джоб успішно завершив рендер відео і перейшов у pending_final_review або completed.
Архітектурні нотатки (важливо пам'ятати)
3 окремих Celery-воркери на optical-dev
worker: черги default, ingest, notify, render (concurrency=8)
tts-worker: черга tts ONLY (concurrency=10, Cloud Run mode)
ffmpeg-worker: черга ffmpeg (concurrency=20, Cloud Run mode)
[!warning] Ключове правило Якщо
tts-workerне перебудований —synthesize_cue_taskзависне в черзі назавжди (0/N cues). Завжди перебудовуватиtts-workerпісля змін уtts_synthesis.py.
USE_CELERY_FALLBACK=true на optical-dev
Коли це встановлено, завдання йдуть у локальний Celery замість Cloud Run. Це потрібно для дебагу.
MongoDB $jsonSchema validator
Валідатор з validationAction: "error" блокує будь-який невідомий статус. Повний список статусів:
ALL_STATUSES = [
"created", "ingesting", "ai_processing",
"pending_qc", "approved_english", "approved_source",
"rejected", "qc_feedback",
"translating", "tts_generating", "tts_failed",
"rendering_video", "render_failed", "rendering_qc",
"pending_final_review", "completed",
"processing_failed", "cancelled",
]
Glossary lookup chain
job_doc.project_id (string)
→ db.projects.find_one({"_id": project_id}) # projects._id = str(ObjectId)
→ project.client_id (string)
→ db.glossaries.find_one({"client_id": ..., "status": "active"})
→ glossary.current_version_id (string)
→ db.glossary_terms.find({"version_id": version_id})
→ ahocorasick exact match + vector search
Команди для швидкого старту
cd /Users/ai_leed/Documents/Projects/Oliver/video-accessibility
# Перевірити статус
git log --oneline -5
git status
# Backend lint
cd backend && ruff check . && cd ..
# Frontend type-check
cd frontend && npm run type-check && cd ..
# Запустити локально
./scripts/run-local.sh
Файли змінені в цій сесії
backend/app/tasks/translate_and_synthesize.py (job_doc fix)
backend/app/services/gemini.py (model update)
backend/app/services/glossary_service.py (debug logging + guards)
backend/app/core/config.py (TTS model names)
backend/app/tasks/tts_synthesis.py (TTS flash model)
backend/app/migrations/scripts/migration_2026-04-30-000002_fix_status_enum.py
backend/app/migrations/run.py (new file)
frontend/src/routes/Dashboard.tsx (Processing counter fix)
frontend/src/routes/jobs/JobsList.tsx (AllJobs filter fix)