106 lines
4.0 KiB
PowerShell
106 lines
4.0 KiB
PowerShell
param([string]$Release = "v1.9.1")
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
$rootDir = Split-Path -Parent (Split-Path -Parent $scriptDir)
|
|
$appDir = Join-Path $rootDir "app"
|
|
$toolsDir = Join-Path $appDir "tools"
|
|
$speechWinRoot = Join-Path $appDir "speech-backend\win"
|
|
$speechRoot = Join-Path $speechWinRoot "cpu"
|
|
$speechVulkanRoot = Join-Path $speechWinRoot "vulkan"
|
|
|
|
function Enable-Tls12 {
|
|
try {
|
|
$tls12 = [Enum]::ToObject([Net.SecurityProtocolType], 3072)
|
|
[Net.ServicePointManager]::SecurityProtocol =
|
|
[Net.ServicePointManager]::SecurityProtocol -bor $tls12
|
|
} catch {
|
|
throw "TLS 1.2 could not be enabled: $($_.Exception.Message)"
|
|
}
|
|
}
|
|
|
|
function Download-File {
|
|
param([string]$Url, [string]$DestPath, [string]$Label)
|
|
Write-Host " >> Downloading $Label..."
|
|
Enable-Tls12
|
|
$client = New-Object System.Net.WebClient
|
|
$client.Headers.Add("User-Agent", "Uncensored-AI-Studio")
|
|
try {
|
|
$client.DownloadFile($Url, $DestPath)
|
|
} finally {
|
|
$client.Dispose()
|
|
}
|
|
}
|
|
|
|
function Find-FirstFile {
|
|
param([string]$Root, [string[]]$Names)
|
|
foreach ($name in $Names) {
|
|
$found = Get-ChildItem $Root -Recurse -File -ErrorAction SilentlyContinue |
|
|
Where-Object { $_.Name -ieq $name } |
|
|
Select-Object -First 1
|
|
if ($found) { return $found.FullName }
|
|
}
|
|
return $null
|
|
}
|
|
|
|
New-Item -ItemType Directory -Force -Path $toolsDir, $speechRoot, $speechVulkanRoot | Out-Null
|
|
|
|
$cliPath = Join-Path $speechRoot "whisper-cli.exe"
|
|
if (Test-Path $cliPath) {
|
|
Write-Host " OK whisper.cpp speech backend already ready."
|
|
if (-not (Test-Path (Join-Path $speechVulkanRoot "whisper-cli.exe"))) {
|
|
Write-Host " .. Optional Vulkan GPU backend slot: app/speech-backend/win/vulkan"
|
|
}
|
|
exit 0
|
|
}
|
|
|
|
$legacyCli = Join-Path $speechWinRoot "whisper-cli.exe"
|
|
$legacyServer = Join-Path $speechWinRoot "whisper-server.exe"
|
|
if (Test-Path $legacyCli) {
|
|
Copy-Item $legacyCli $cliPath -Force
|
|
if (Test-Path $legacyServer) {
|
|
Copy-Item $legacyServer (Join-Path $speechRoot "whisper-server.exe") -Force
|
|
}
|
|
Get-ChildItem $speechWinRoot -File -ErrorAction SilentlyContinue |
|
|
Where-Object { $_.Name -notin @("whisper-cli.exe", "whisper-server.exe") } |
|
|
ForEach-Object { Copy-Item $_.FullName (Join-Path $speechRoot $_.Name) -Force }
|
|
Write-Host " OK migrated existing whisper.cpp CPU backend to app/speech-backend/win/cpu."
|
|
Write-Host " .. For GPU transcription, place a Vulkan-enabled whisper.cpp build in app/speech-backend/win/vulkan."
|
|
exit 0
|
|
}
|
|
|
|
$asset = "whisper-bin-x64.zip"
|
|
$archive = Join-Path $toolsDir $asset
|
|
$extract = Join-Path $toolsDir "whisper-extract"
|
|
$url = "https://github.com/ggml-org/whisper.cpp/releases/download/$Release/$asset"
|
|
|
|
Remove-Item $archive, $extract -Recurse -Force -ErrorAction SilentlyContinue
|
|
Download-File -Url $url -DestPath $archive -Label "whisper.cpp speech backend ($Release)"
|
|
|
|
Write-Host " >> Extracting whisper.cpp speech backend..."
|
|
Expand-Archive -Path $archive -DestinationPath $extract -Force
|
|
|
|
$cli = Find-FirstFile -Root $extract -Names @("whisper-cli.exe", "main.exe")
|
|
$server = Find-FirstFile -Root $extract -Names @("whisper-server.exe", "server.exe")
|
|
if (-not $cli) {
|
|
throw "whisper-cli.exe was not found after extracting $asset"
|
|
}
|
|
|
|
Get-ChildItem $extract -Recurse -File | ForEach-Object {
|
|
Copy-Item $_.FullName (Join-Path $speechRoot $_.Name) -Force
|
|
}
|
|
if ((Split-Path -Leaf $cli) -ine "whisper-cli.exe") {
|
|
Copy-Item $cli $cliPath -Force
|
|
}
|
|
if ($server -and (Split-Path -Leaf $server) -ine "whisper-server.exe") {
|
|
Copy-Item $server (Join-Path $speechRoot "whisper-server.exe") -Force
|
|
}
|
|
|
|
Remove-Item $archive, $extract -Recurse -Force -ErrorAction SilentlyContinue
|
|
if (-not (Test-Path $cliPath)) {
|
|
throw "whisper-cli.exe was not installed."
|
|
}
|
|
Write-Host " OK whisper.cpp speech backend installed."
|
|
Write-Host " .. CPU backend path: app/speech-backend/win/cpu"
|
|
Write-Host " .. Optional Vulkan GPU backend path: app/speech-backend/win/vulkan"
|