-- TTS 인스턴스 엔진 종류 구분 (2026-05-18, Phase 0 PoC 통과 후). -- admin "TTS 서버 추가" 에서 Qwen3-TTS (운영 default) / CosyVoice 3.0 (베타) 선택 가능. -- -- 회귀 0 가드: -- - 기존 row 자동 engine_kind='qwen3' 매핑 (default + UPDATE) -- - dispatcher 라우팅 = Phase 3 까지 = engine_kind 무관 (admin 만 분기) -- - CosyVoice spawn fail → Qwen3 fallback (Phase 3 dispatcher) -- -- 이행 단계 (실행 순서): -- 1) 이 SQL 적용 (ALTER TABLE + UPDATE 기존 row) -- 2) backend 배포 (engine_kind 인자 처리 + GHCR image 분기) -- 3) GHCR `voicetalk-tts-cosyvoice:latest` 빌드 (.github/workflows/build-tts-cosyvoice-image.yml) -- 4) frontend 배포 (admin UI engine dropdown) -- -- 참조: doc/runbook/tts_engine_multi.md Phase 1 작업 분해 ALTER TABLE public.tts_scale_instances ADD COLUMN IF NOT EXISTS engine_kind TEXT NOT NULL DEFAULT 'qwen3'; -- 기존 row 안전 매핑 (DEFAULT 가 새 row 에만 적용되므로 명시적 UPDATE). UPDATE public.tts_scale_instances SET engine_kind = 'qwen3' WHERE engine_kind IS NULL OR engine_kind = ''; -- CHECK constraint — 새 엔진 추가 시 이 제약을 갱신. ALTER TABLE public.tts_scale_instances DROP CONSTRAINT IF EXISTS tts_scale_instances_engine_kind_check; ALTER TABLE public.tts_scale_instances ADD CONSTRAINT tts_scale_instances_engine_kind_check CHECK (engine_kind IN ('qwen3', 'cosyvoice35')); -- engine_kind 별 인덱스 (스케일 후 라우팅 / 상태 조회 효율). CREATE INDEX IF NOT EXISTS idx_tts_scale_engine_status ON public.tts_scale_instances(engine_kind, status) WHERE status IN ('free', 'ready', 'warm_stopped');