G0~G8 성과·동맹 측정 OS 작업 일괄 고정
8월 7일까지 워킹트리에만 남아 있던 미커밋 작업을 커밋한다. 여러 사본 폴더(worktree·clone)에 흩어져 있던 중간 스냅샷을 정리하기 전에 원본을 git 이력으로 고정하는 것이 목적이다. - contracts/routes/services: measurement, outcome_trajectory, rupture_repair, deliberate_practice, calibration_transfer, supervision_research, multimodal_alliance, continuous_improvement 계열 신규 모듈과 테스트 - infra/db/init: 07~16 마이그레이션(측정 기반~calibration transfer 실행) - apps/web: 세션 리뷰 카드·관리 화면·E2E 스펙 추가 - docs/ops: G0~G8 라이브 통합·배포·롤백 증거 문서와 evidence JSON/PNG - scripts: smoke·ledger·릴리스 에이전트·NAS 프리뷰 운영 스크립트 engine.public 로그 .bak과 apps/web/test-results 산출물은 커밋에서 제외했다.
This commit is contained in:
parent
93dd8f82d7
commit
16e791e044
390 changed files with 243188 additions and 499 deletions
89
scripts/start-local-whisper-stt.ps1
Normal file
89
scripts/start-local-whisper-stt.ps1
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
param(
|
||||
[int]$Port = 9882,
|
||||
[ValidateSet('large-v3', 'large-v3-turbo', 'medium', 'small', 'base')]
|
||||
[string]$Model = 'large-v3',
|
||||
[ValidateSet('auto', 'cuda', 'cpu')]
|
||||
[string]$Device = 'auto',
|
||||
[int]$WaitReadySeconds = 180
|
||||
)
|
||||
|
||||
# 노트북 상주 faster-whisper 스트리밍 STT 사이드카를 띄운다.
|
||||
# 오디오는 호스트를 벗어나지 않고 외부 STT 키도 필요 없다.
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
|
||||
$OutputEncoding = [System.Text.UTF8Encoding]::new($false)
|
||||
|
||||
$repoRoot = Split-Path -Parent $PSScriptRoot
|
||||
$serverScript = Join-Path $PSScriptRoot 'local-whisper-stt-server.py'
|
||||
$runtimeLogDir = Join-Path $env:TEMP 'Vignette\local-whisper-stt'
|
||||
$stdoutLog = Join-Path $runtimeLogDir 'server.out.log'
|
||||
$stderrLog = Join-Path $runtimeLogDir 'server.err.log'
|
||||
|
||||
if (!(Test-Path -LiteralPath $serverScript)) {
|
||||
throw "로컬 whisper 서버 스크립트를 찾지 못했습니다: $serverScript"
|
||||
}
|
||||
|
||||
# faster-whisper 가 설치된 인터프리터를 고른다.
|
||||
$pyCandidates = @(
|
||||
(Join-Path $env:LOCALAPPDATA 'Programs\Python\Python311\python.exe'),
|
||||
(Join-Path $env:LOCALAPPDATA 'Programs\Python\Python312\python.exe'),
|
||||
'python'
|
||||
)
|
||||
$python = $null
|
||||
foreach ($candidate in $pyCandidates) {
|
||||
try {
|
||||
& $candidate -c 'import faster_whisper, websockets' 2>$null
|
||||
if ($LASTEXITCODE -eq 0) { $python = $candidate; break }
|
||||
} catch { }
|
||||
}
|
||||
if (-not $python) {
|
||||
throw 'faster_whisper 와 websockets 가 설치된 python 을 찾지 못했습니다.'
|
||||
}
|
||||
Write-Output "python: $python"
|
||||
|
||||
$listener = Get-NetTCPConnection -State Listen -LocalPort $Port -ErrorAction SilentlyContinue
|
||||
if ($null -ne $listener) {
|
||||
Write-Output "포트 $Port 에 이미 리스너가 있습니다. 임의 종료하지 않았습니다."
|
||||
return
|
||||
}
|
||||
|
||||
New-Item -ItemType Directory -Path $runtimeLogDir -Force | Out-Null
|
||||
$serverArgs = @(
|
||||
'-X', 'utf8', $serverScript,
|
||||
'--host', '127.0.0.1',
|
||||
'--port', "$Port",
|
||||
'--model', $Model,
|
||||
'--device', $Device,
|
||||
'--enable'
|
||||
)
|
||||
$process = Start-Process -WindowStyle Hidden -FilePath $python `
|
||||
-ArgumentList $serverArgs `
|
||||
-WorkingDirectory $repoRoot `
|
||||
-RedirectStandardOutput $stdoutLog `
|
||||
-RedirectStandardError $stderrLog `
|
||||
-PassThru
|
||||
|
||||
Write-Output "로컬 whisper STT 로드를 시작했습니다. PID=$($process.Id) model=$Model device=$Device"
|
||||
Write-Output "로그: $stdoutLog"
|
||||
if ($WaitReadySeconds -le 0) {
|
||||
return
|
||||
}
|
||||
|
||||
$deadline = (Get-Date).AddSeconds($WaitReadySeconds)
|
||||
while ((Get-Date) -lt $deadline) {
|
||||
if ($process.HasExited) {
|
||||
throw "로컬 whisper STT가 준비되기 전에 종료됐습니다. stderr=$stderrLog"
|
||||
}
|
||||
$ready = Get-NetTCPConnection -State Listen -LocalPort $Port -ErrorAction SilentlyContinue
|
||||
if ($null -ne $ready) {
|
||||
Write-Output "로컬 whisper STT 준비 완료: ws://127.0.0.1:$Port/v1/listen"
|
||||
if (Test-Path -LiteralPath $stdoutLog) {
|
||||
Get-Content -LiteralPath $stdoutLog -Tail 1
|
||||
}
|
||||
return
|
||||
}
|
||||
Start-Sleep -Seconds 2
|
||||
}
|
||||
|
||||
throw "로컬 whisper STT 준비 시간이 ${WaitReadySeconds}초를 넘었습니다. 로그: $stdoutLog"
|
||||
Loading…
Add table
Add a link
Reference in a new issue