-
Notifications
You must be signed in to change notification settings - Fork 5
Description
Parent
Часть плана модульной декомпозиции: #489
Цель
Разобрать orchestrator.py (4170 строк) до ~100-200 строк. Вынести legacy endpoints, модулизировать startup/shutdown, перевести background tasks на TaskRegistry.
Sub-issues
- Phase 4.0: Аудит эндпоинтов и глобалов orchestrator.py #545 — Phase 4.0: Аудит эндпоинтов и глобалов orchestrator.py
- Phase 4.1: StreamingTTSManager → modules/speech/streaming.py #546 — Phase 4.1: StreamingTTSManager → modules/speech/streaming.py
- Phase 4.2: Widget public endpoints → modules/channels/widget/ #547 — Phase 4.2: Widget public endpoints → modules/channels/widget/
- Phase 4.3: Legacy /v1/* + core endpoints → modules/compat/router.py #548 — Phase 4.3: Legacy /v1/* + core endpoints → modules/compat/router.py
- Phase 4.4: Admin finetune endpoints → domain modules #549 — Phase 4.4: Admin finetune endpoints → domain modules
- Phase 4.5: Оставшиеся admin endpoints → domain routers #550 — Phase 4.5: Оставшиеся admin endpoints → domain routers
- Phase 4.6: Background tasks → TaskRegistry #551 — Phase 4.6: Background tasks → TaskRegistry
- Phase 4.7: Модульный startup + shutdown + deployment modes #552 — Phase 4.7: Модульный startup + shutdown + deployment modes
- Phase 4.8: Документация Phase 4 #553 — Phase 4.8: Документация Phase 4
Граф зависимостей
#545 (аудит)
├──→ #546 (StreamingTTSManager)
│ └──→ #550 (admin endpoints) ──┐
├──→ #547 (widget endpoints) ─────────┤
├──→ #548 (/v1/* + core) ────────────┤
├──→ #549 (finetune) ────────────────┤
└──→ #551 (background tasks) ────────┤
│
└──→ #552 (startup + shutdown)
└──→ #553 (документация)
#545 блокирует все extraction-задачи. Батчи #546–#551 независимы друг от друга (кроме #550 ← #546). #552 ждёт завершения всех extraction + tasks. #553 — после финальной сборки.
Подробности подэтапов
4a. Вынести legacy endpoints (~2600 строк)
Разбито на 5 sub-issues (#546–#550):
StreamingTTSManager(~224 строк) →modules/speech/streaming.py- Widget public endpoints (~516 строк) →
modules/channels/widget/router_public.py /v1/*+ core endpoints (~511 строк) →modules/compat/router.py- Admin finetune (~377 строк) →
modules/llm/router_finetune.py+modules/speech/router_finetune.py - Admin LLM/voice/monitoring/models/auth (~1400 строк) → domain routers
4b+4d+4e. Модульный startup + shutdown + deployment modes (#552)
Заменить 394-строчный startup_event() на per-module init(). Graceful shutdown: tasks → bots → bridge → DB. Deployment modes через загрузку/не-загрузку модулей.
4c. Background tasks → TaskRegistry (#551)
6 задач из asyncio.create_task() → TaskRegistry.register():
| Задача | Интервал | Домен |
|---|---|---|
_cleanup_expired_sessions() |
1 час | core |
_periodic_vacuum() |
7 дней | core |
_periodic_kanban_sync() |
15 мин | kanban |
_periodic_woocommerce_sync() |
ежедневно 23:00 UTC | ecommerce |
_build_wiki_embeddings() |
one-shot | knowledge |
_load_collection_indexes() |
one-shot | knowledge |
Целевой orchestrator.py
~100-200 строк:
- Создание FastAPI app
- Middleware (CORS, rate limiter, security headers)
- Загрузка модулей по deployment mode
- Startup/shutdown lifecycle
- Точка входа uvicorn
Критерии готовности
-
orchestrator.py≤ 200 строк - Все legacy
/v1/*endpoints вынесены в отдельный роутер - Startup модульный — каждый модуль инициализируется через свой
init() - Background tasks управляются через TaskRegistry
- Graceful shutdown останавливает задачи → ботов → bridge → DB
- Deployment modes реализованы через загрузку/не-загрузку модулей
- Health check показывает только загруженные модули
- Все endpoints работают
- Боты стартуют корректно
- CI зелёный
Риск: высокий
Это самая сложная фаза. Затрагивает точку входа приложения, инициализацию всех сервисов и lifecycle. Каждый подэтап — отдельный PR с тщательным тестированием.
Зависимости
- Фазы 0-3 ✅ (все модули на месте)