49 lines
1.6 KiB
PowerShell
49 lines
1.6 KiB
PowerShell
param(
|
|||
|
|
[ValidateSet("cpu", "cuda", "vulkan")]
|
||
|
|
[string]$Backend = "cpu",
|
||
|
|
[string]$Tag = "",
|
||
|
|
[string]$OutDir = ""
|
||
|
|
)
|
||
|
|
|
||
|
|
$ErrorActionPreference = "Stop"
|
||
|
|
|
||
|
|
if (-not $OutDir) {
|
||
|
|
$OutDir = Join-Path $env:APPDATA "XianrenStudio\engines"
|
||
|
|
}
|
||
|
|
New-Item -ItemType Directory -Force -Path $OutDir | Out-Null
|
||
|
|
|
||
|
|
$repo = "ggerganov/llama.cpp"
|
||
|
|
$api = "https://api.github.com/repos/$repo/releases/latest"
|
||
|
|
|
||
|
|
if (-not $Tag) {
|
||
|
|
Write-Host "Querying latest release from GitHub..."
|
||
|
|
$release = Invoke-RestMethod -Uri $api -Headers @{ "User-Agent" = "xianren-studio" }
|
||
|
|
$Tag = $release.tag_name
|
||
|
|
Write-Host "Latest tag: $Tag"
|
||
|
|
}
|
||
|
|
|
||
|
|
$assetName = "llama-$Tag-bin-win-$Backend-x64.zip"
|
||
|
|
$assetUrl = "https://github.com/$repo/releases/download/$Tag/$assetName"
|
||
|
|
$zipPath = Join-Path $env:TEMP $assetName
|
||
|
|
|
||
|
|
Write-Host "Downloading $assetUrl"
|
||
|
|
curl.exe -L --fail --progress-bar -o $zipPath $assetUrl
|
||
|
|
if ($LASTEXITCODE -ne 0) {
|
||
|
|
throw "download failed with exit code $LASTEXITCODE"
|
||
|
|
}
|
||
|
|
|
||
|
|
Write-Host "Extracting llama-server.exe to $OutDir"
|
||
|
|
$extract = Join-Path $env:TEMP "llama-$Backend-extract"
|
||
|
|
if (Test-Path $extract) { Remove-Item -Recurse -Force $extract }
|
||
|
|
Expand-Archive -Path $zipPath -DestinationPath $extract
|
||
|
|
|
||
|
|
$server = Get-ChildItem -Path $extract -Recurse -Filter "llama-server.exe" | Select-Object -First 1
|
||
|
|
if (-not $server) {
|
||
|
|
throw "llama-server.exe not found in archive"
|
||
|
|
}
|
||
|
|
$targetDir = Join-Path $OutDir $Backend
|
||
|
|
New-Item -ItemType Directory -Force -Path $targetDir | Out-Null
|
||
|
|
Copy-Item -Path (Join-Path $extract "*") -Destination $targetDir -Recurse -Force
|
||
|
|
Remove-Item -Recurse -Force $extract
|
||
|
|
|
||
|
|
Write-Host "Done. Engine: $(Join-Path $targetDir "llama-server.exe")"
|