vignette/apps/api/app
Yun Chan 2624d49984 설치형 로컬 TTS를 MeloTTS 한국어(MIT)로 채택하고 엔드포인트로 연결
Higgs Audio v3 는 연구/비상업 라이선스라 config.py 가 environment != dev 에서
차단하고 있었다. 그 가드를 푸는 건 법적 판단이라 코드로 결정할 수 없어서,
상업 사용이 허용된 설치형을 다시 찾아 MeloTTS Korean 으로 바꿨다. 결과적으로
가드를 건드릴 필요 자체가 사라졌다 — Higgs 가드는 그대로 두고 provider 만
melotts 로 두면 운영에서도 동작한다.

검토 결과:
- MeloTTS   MIT       한국어 지원  -> 채택. CPU 실시간, 사전학습 다화자
- Kokoro-82M Apache2.0 한국어 없음  -> 탈락. 공식 VOICES.md 언어 목록에 부재
- Piper      GPL                   -> 탈락
- XTTS-v2 / Fish Speech 비상업      -> 탈락. Higgs 와 같은 문제

사전학습 다화자 모델이라 실존 인물 reference 를 쓰지 않는다. Higgs 경로가
P1 프리셋 한정이던 이유가 없으므로 모든 페르소나 프리셋에 적용된다.

구현:
- scripts/melotts-server.py  loopback HTTP 사이드카(/health, POST /tts -> WAV)
- voice_tts_provider=melotts 경로와 VIGNETTE_MELOTTS_TTS_* 설정
- scripts/start-melotts.ps1  런처(설치 순서 안내 포함)

실측:
- CPU 정상 상태 RTF 0.27~0.28(실시간 3.6배). 첫 실행 13.25 는 모델 다운로드
- POST /tts 200, WAV 350,566 bytes, 3.61s, 헤더 provider/model/license
- 빈 텍스트 422, 미지 경로 404 로 fail-closed
- 왕복 검증: MeloTTS 합성음을 로컬 faster-whisper 가 완전 일치 전사
  "그렇게 느끼셨군요. 조금 더 이야기해 주실 수 있을까요?" (word timestamp 8개)

설치 함정 3가지를 decisions/local-voice-stack.md 에 남겼다.
librosa 0.9.1 의 pkg_resources(setuptools<81), MeloTTS 가 언어와 무관하게
임포트하는 일본어 unidic 사전, Windows 한국어 g2p 의 eunjeon.

G7 게이트의 TTS 허용목록에 melotts 를 추가했다. 선언/실제 불일치 차단과
배치 STT 배제는 그대로다.

검증: API 914 passed, 사이드카 melotts 16/16 + whisper 37/37, SSOT FAIL 0, ruff clean.
2026-08-08 09:29:57 +09:00
..
contracts G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
data G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
routes G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
services 설치형 로컬 TTS를 MeloTTS 한국어(MIT)로 채택하고 엔드포인트로 연결 2026-08-08 09:29:57 +09:00
__init__.py
auth_sessions.py feat: 운영 안정성과 세션 음성 경험 개선 2026-07-31 00:13:08 +09:00
auth_types.py 음성 재생과 운영 배포 정리 2026-06-28 12:18:20 +09:00
config.py 설치형 로컬 TTS를 MeloTTS 한국어(MIT)로 채택하고 엔드포인트로 연결 2026-08-08 09:29:57 +09:00
db.py feat: 운영 안정성과 세션 음성 경험 개선 2026-07-31 00:13:08 +09:00
deps.py 세션 평가·라이브코치·교수자 분석 라운드 마감 + 문서 정리 + 코드품질 리팩터 2026-07-02 02:50:36 +09:00
engine_client.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
main.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
paths.py 음성 재생과 운영 배포 정리 2026-06-28 12:18:20 +09:00
persona_generation_contract.py 런타임 계약과 학습자 흐름 보강 2026-06-29 08:12:14 +09:00
persona_read_model.py 페르소나 소스팩 동기화 정리 2026-06-28 20:12:35 +09:00
persona_repository.py 전수 E2E 순회·소유자 결정 6건 구현·디자인 감사 반영 2026-07-27 14:25:24 +09:00
runtime_policy.py
runtime_schema.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
saml.py 현재 작업 전체 반영 2026-06-27 16:08:41 +09:00
session_evaluation_input.py 세션 평가·라이브코치·교수자 분석 라운드 마감 + 문서 정리 + 코드품질 리팩터 2026-07-02 02:50:36 +09:00
session_persistence.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
session_read_model.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
stage_contract.py 세션 계약과 메모리 경계 보강 2026-06-28 23:52:18 +09:00
store.py 전 저장소 리팩터링과 SSOT 정비 2026-07-15 21:31:30 +09:00
taxonomy.py 전 저장소 리팩터링과 SSOT 정비 2026-07-15 21:31:30 +09:00
test_admin_health_maintenance.py 운영 지표와 지원 요청 저장소 추가 2026-06-28 20:13:06 +09:00
test_admin_ops.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_alliance_calibration.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_alliance_measurement.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_auth_providers.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_calibration_transfer.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_calibration_transfer_store.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_case_worksheet_rubric.py 평가 및 화면 구조 정리 2026-06-28 21:50:21 +09:00
test_claude_usage_backfill.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_client_diagnostics.py 관리자 빈 화면 진단 로그 추가 2026-07-03 23:24:09 +09:00
test_client_reply_quality.py 전 저장소 리팩터링과 SSOT 정비 2026-07-15 21:31:30 +09:00
test_continuous_improvement.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_continuous_improvement_agentic.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_continuous_improvement_producer.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_continuous_improvement_store.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_continuous_improvement_trigger.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_dataset_export.py 전 저장소 리팩터링과 SSOT 정비 2026-07-15 21:31:30 +09:00
test_deliberate_practice.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_deliberate_practice_store.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_eval_routes.py 세션 평가·라이브코치·교수자 분석 라운드 마감 + 문서 정리 + 코드품질 리팩터 2026-07-02 02:50:36 +09:00
test_evaluation_persistence.py 전 저장소 리팩터링과 SSOT 정비 2026-07-15 21:31:30 +09:00
test_evaluator_model_routing.py 평가 캐시와 개인정보 마스킹 보강 2026-06-28 20:12:20 +09:00
test_g7_voice_gain_evidence.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_learner_dashboard.py 세션 평가·라이브코치·교수자 분석 라운드 마감 + 문서 정리 + 코드품질 리팩터 2026-07-02 02:50:36 +09:00
test_live_coach_privacy.py 전 저장소 리팩터링과 SSOT 정비 2026-07-15 21:31:30 +09:00
test_live_coach_sources.py 라이브코치 소스팩 새로고침 보강 2026-06-28 23:52:55 +09:00
test_llm_pricing.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_measurement_contract.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_measurement_routes.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_multimodal_alliance.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_multimodal_alliance_store.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_notifications.py 세션 평가·라이브코치·교수자 분석 라운드 마감 + 문서 정리 + 코드품질 리팩터 2026-07-02 02:50:36 +09:00
test_orchestrator_masking.py 전수 E2E 순회·소유자 결정 6건 구현·디자인 감사 반영 2026-07-27 14:25:24 +09:00
test_outcome_trajectory.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_outcome_trajectory_schema.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_outcome_trajectory_store.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_persona_generation_contract.py 런타임 계약과 학습자 흐름 보강 2026-06-29 08:12:14 +09:00
test_persona_review.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_phase3_artifact_checker.py 세션 평가·라이브코치·교수자 분석 라운드 마감 + 문서 정리 + 코드품질 리팩터 2026-07-02 02:50:36 +09:00
test_phase3_kpi_export.py Phase 3 KPI 계약 상수 분리 2026-06-29 00:01:24 +09:00
test_pii_masking_eval.py 세션 평가와 교수자 분석 보강 2026-07-01 12:10:52 +09:00
test_practice_runtime_observer.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_rbac_idor.py 전 저장소 리팩터링과 SSOT 정비 2026-07-15 21:31:30 +09:00
test_review_summary_josa.py 전수 E2E 순회·소유자 결정 6건 구현·디자인 감사 반영 2026-07-27 14:25:24 +09:00
test_review_valence.py 전수 E2E 순회·소유자 결정 6건 구현·디자인 감사 반영 2026-07-27 14:25:24 +09:00
test_runtime_policy.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_runtime_schema_ssot.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_rupture_repair.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_rupture_repair_store.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_rupture_runtime.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_rupture_scenario_director.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_session_digest_worker.py 런타임 계약과 학습자 흐름 보강 2026-06-29 08:12:14 +09:00
test_session_learning_producer.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_session_memory.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_session_progress.py 전 저장소 리팩터링과 SSOT 정비 2026-07-15 21:31:30 +09:00
test_session_share.py 세션 계약과 메모리 경계 보강 2026-06-28 23:52:18 +09:00
test_session_time_and_goals.py 전 저장소 리팩터링과 SSOT 정비 2026-07-15 21:31:30 +09:00
test_session_turn_persistence.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_stage_contract.py 세션 계약과 메모리 경계 보강 2026-06-28 23:52:18 +09:00
test_state_machine_resistance.py
test_supervision_research.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_supervision_research_producer.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_supervision_research_store.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_supervision_research_version_evaluator.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_tabular_ingest.py 전 저장소 리팩터링과 SSOT 정비 2026-07-15 21:31:30 +09:00
test_teacher_dashboard.py 세션 평가·라이브코치·교수자 분석 라운드 마감 + 문서 정리 + 코드품질 리팩터 2026-07-02 02:50:36 +09:00
test_usage_report.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_user_onboarding_validation.py 전수 E2E 순회·소유자 결정 6건 구현·디자인 감사 반영 2026-07-27 14:25:24 +09:00
test_user_support_tickets.py 운영 지표와 지원 요청 저장소 추가 2026-06-28 20:13:06 +09:00
test_voice_runtime.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
test_voice_service.py 설치형 로컬 TTS를 MeloTTS 한국어(MIT)로 채택하고 엔드포인트로 연결 2026-08-08 09:29:57 +09:00
test_voice_ws.py G0~G8 성과·동맹 측정 OS 작업 일괄 고정 2026-08-08 01:30:53 +09:00
turn_runtime.py feat: 운영 안정성과 세션 음성 경험 개선 2026-07-31 00:13:08 +09:00