Batch+realtime transcription API: faster-whisper engine w/ EngineOwner (single GPU owner, OOM downgrade chain, persisted attempted_profiles), hardware-adaptive device manager (T0-T3 VRAM tiers), Redis/in-proc job queue w/ leases + crash recovery, postprocess (glossary/rules/LLM w/ egress guard), privacy-first result store (UUID keys, source deleted after transcribe), retention sweeper, API-key auth (HMAC digests, scopes, job ownership), WebSocket realtime lane (LocalAgreement), CLI (detect/transcribe/bench/serve/key), Docker, benchmark runner. 127 mock-based tests pass; ruff clean. Includes verification checklist and autoplan review notes.
80 lines
4.3 KiB
Bash
80 lines
4.3 KiB
Bash
# ── luke_scribe 설정 (모든 값은 선택; 기본값은 src/luke_scribe/config.py)
|
|
# 복사: cp .env.example .env
|
|
|
|
# ── 모델 ─────────────────────────────────────────────────────────────
|
|
# 실시간 경로 기본 모델 (P1 bench 게이트 전에는 turbo)
|
|
LUKESCRIBE_MODEL_RT=large-v3-turbo
|
|
# 배치 경로 기본 모델 (P1 bench 게이트 전에는 turbo; 게이트 후 결정 파일로 대체)
|
|
LUKESCRIBE_MODEL_BATCH=large-v3-turbo
|
|
# 모델 캐시 디렉터리 (Hugging Face 캐시)
|
|
LUKESCRIBE_MODEL_CACHE_DIR=
|
|
|
|
# ── 장치 ─────────────────────────────────────────────────────────────
|
|
# auto | cpu | cuda | cuda:N
|
|
LUKESCRIBE_DEVICE=auto
|
|
# null이면 Device Manager가 자동 결정 (float16 | int8_float16 | int8 | auto)
|
|
LUKESCRIBE_COMPUTE_TYPE=auto
|
|
# 배치 워커 프로세스 수 (0 = Device Manager 자동 산정)
|
|
LUKESCRIBE_WORKERS=0
|
|
|
|
# ── 언어 / 후처리 ────────────────────────────────────────────────────
|
|
# 기본 언어 (auto = 자동 감지)
|
|
LUKESCRIBE_LANGUAGE=ko
|
|
# 후처리 모드: none | glossary | rules | llm
|
|
LUKESCRIBE_POST_MODE=rules
|
|
# glossary/rules 활성화 여부 (true 권장)
|
|
LUKESCRIBE_POST_ENABLED=true
|
|
|
|
# ── API 키 인증 ──────────────────────────────────────────────────────
|
|
# 형식: "key:스코프1,스코프2" 또는 "key" (기본 스코프 transcribe). 여러 개는 쉼표로.
|
|
# 예: LUKESCRIBE_API_KEYS="luke-$(openssl rand -hex 24):transcribe,admin"
|
|
LUKESCRIBE_API_KEYS=
|
|
# 키 저장 파일 (지정 시 키를 이 파일에 HMAC 다이제스트로 저장, CLI `key create`로 생성)
|
|
LUKESCRIBE_API_KEY_FILE=api_keys.json
|
|
# 스코프 검증 (comma separated required scope for admin routes)
|
|
LUKESCRIBE_ADMIN_SCOPES=admin
|
|
|
|
# ── 큐 / 실행 프로파일 ───────────────────────────────────────────────
|
|
# redis | inproc (dev/Colab 기본 inproc, Redis 불필요)
|
|
LUKESCRIBE_QUEUE_BACKEND=inproc
|
|
# 프로덕션 Redis URL (queue_backend=redis 일 때만)
|
|
LUKESCRIBE_REDIS_URL=redis://localhost:6379/0
|
|
# 최대 큐 길이 (초과 시 429)
|
|
LUKESCRIBE_MAX_QUEUE=100
|
|
# 입력 상한
|
|
LUKESCRIBE_MAX_DURATION_SEC=14400
|
|
LUKESCRIBE_MAX_UPLOAD_BYTES=2147483648
|
|
|
|
# ── 보관 / 프라이버시 ────────────────────────────────────────────────
|
|
# 결과 보관 기간 (일)
|
|
LUKESCRIBE_RETENTION_DAYS=7
|
|
# 결과 저장 루트 (기본: 시스템 임시 디렉터리/luke-scribe)
|
|
LUKESCRIBE_RESULTS_DIR=
|
|
# 원본/파생 오디오 즉시 삭제 (false 금지)
|
|
LUKESCRIBE_DELETE_SOURCE=true
|
|
|
|
# ── LLM 후처리 (기본 off) ────────────────────────────────────────────
|
|
# local | openai | external
|
|
LUKESCRIBE_LLM_BACKEND=none
|
|
# external/openai 전용: 허용 엔드포인트 목록 (provider_id=url, 쉼표 구분)
|
|
LUKESCRIBE_LLM_ALLOWLIST=
|
|
# LLM 모델명
|
|
LUKESCRIBE_LLM_MODEL=
|
|
# 전송 감사 로그 (true)
|
|
LUKESCRIBE_LLM_AUDIT=true
|
|
|
|
# ── 터널 ─────────────────────────────────────────────────────────────
|
|
# none | cloudflare
|
|
LUKESCRIBE_TUNNEL=none
|
|
# cloudflared 바이너리 경로 (PATH에 없을 때)
|
|
LUKESCRIBE_CLOUDFLARED_PATH=
|
|
|
|
# ── 관측 ─────────────────────────────────────────────────────────────
|
|
LUKESCRIBE_LOG_LEVEL=INFO
|
|
# true면 JSON 라인 로그 (프로덕션 권장)
|
|
LUKESCRIBE_LOG_JSON=false
|
|
|
|
# ── API 서버 ─────────────────────────────────────────────────────────
|
|
LUKESCRIBE_HOST=0.0.0.0
|
|
LUKESCRIBE_PORT=8000
|