Files
llm/scripts/deploy_transformers_service.ps1

75 lines
1.8 KiB
PowerShell

param(
[Parameter(Mandatory = $true)]
[ValidateSet("translation", "audio", "video", "image")]
[string]$Plugin,
[string]$DockerHost = "ssh://docker-gpu",
[string]$SshTarget = "docker-gpu",
[string]$RemoteArchive = "C:\ProgramData\LLM\model-chat-app.zip",
[string]$RemoteAppDir = "Z:\LLM\model-chat-app",
[switch]$ConfigOnly,
[switch]$Pull,
[switch]$NoSyncApp,
[switch]$NoFirewall
)
$ErrorActionPreference = "Stop"
. (Join-Path $PSScriptRoot "app_archive.ps1")
$composeFile = "core/deploy/docker-gpu/transformers/$Plugin.compose.yaml"
$envFile = "core/deploy/docker-gpu/transformers/$Plugin.env.example"
$ports = @{
translation = 8010
audio = 8020
video = 8030
image = 8040
}
if (-not (Test-Path -LiteralPath $composeFile)) {
throw "Compose file not found: $composeFile"
}
if (-not (Test-Path -LiteralPath $envFile)) {
throw "Env file not found: $envFile"
}
$baseArgs = @(
"--host", $DockerHost,
"compose",
"--env-file", $envFile,
"-f", $composeFile
)
docker @baseArgs config | Out-Host
if ($ConfigOnly) {
exit 0
}
if ($Pull) {
docker @baseArgs pull
if ($LASTEXITCODE -ne 0) {
exit $LASTEXITCODE
}
}
if (-not $NoSyncApp) {
Sync-AppDirectory -SshTarget $SshTarget -RemoteArchive $RemoteArchive -RemoteAppDir $RemoteAppDir
}
docker @baseArgs up -d
if ($LASTEXITCODE -ne 0) {
exit $LASTEXITCODE
}
if (-not $NoFirewall) {
$port = $ports[$Plugin]
$ruleName = "LLM Transformers $Plugin $port"
$firewallScript = @"
if (-not (Get-NetFirewallRule -DisplayName '$ruleName' -ErrorAction SilentlyContinue)) {
New-NetFirewallRule -DisplayName '$ruleName' -Direction Inbound -Action Allow -Protocol TCP -LocalPort $port -Profile Any | Out-Null
}
"@
Invoke-RemotePowerShell -SshTarget $SshTarget -Script $firewallScript
}
exit $LASTEXITCODE