chore: add Windows PowerShell variant of Ollama CV startup script
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
# PowerShell equivalent of start-ollama-cv.sh
|
||||
# Starts Ollama service, pulls model if needed, waits, then restarts AI service
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
# Change to the parent directory of scripts
|
||||
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
Set-Location (Join-Path $scriptDir '..')
|
||||
|
||||
$MODEL = if ($env:OLLAMA_MODEL) { $env:OLLAMA_MODEL } else { 'qwen2.5:7b' }
|
||||
$OLLAMA_WAIT_SECONDS = if ($env:OLLAMA_WAIT_SECONDS) { [int]$env:OLLAMA_WAIT_SECONDS } else { 180 }
|
||||
$PULL_WAIT_SECONDS = if ($env:OLLAMA_PULL_WAIT_SECONDS) { [int]$env:OLLAMA_PULL_WAIT_SECONDS } else { 1800 }
|
||||
|
||||
function compose {
|
||||
docker compose @args
|
||||
}
|
||||
|
||||
function wait_for_ollama {
|
||||
$deadline = (Get-Date).AddSeconds($OLLAMA_WAIT_SECONDS)
|
||||
while ((Get-Date) -lt $deadline) {
|
||||
try {
|
||||
compose exec -T ollama ollama list | Out-Null
|
||||
return $true
|
||||
} catch {
|
||||
# Ignore errors, just wait
|
||||
}
|
||||
Start-Sleep -Seconds 3
|
||||
}
|
||||
return $false
|
||||
}
|
||||
|
||||
function model_present {
|
||||
try {
|
||||
$models = compose exec -T ollama ollama list 2>$null | Select-Object -Skip 1 | ForEach-Object { $_.Split()[0] }
|
||||
return $models -contains $MODEL
|
||||
} catch {
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
function wait_for_model {
|
||||
$deadline = (Get-Date).AddSeconds($PULL_WAIT_SECONDS)
|
||||
while ((Get-Date) -lt $deadline) {
|
||||
if (model_present) {
|
||||
return $true
|
||||
}
|
||||
Start-Sleep -Seconds 5
|
||||
}
|
||||
return $false
|
||||
}
|
||||
|
||||
Write-Host "Starting Ollama service..."
|
||||
compose up -d ollama
|
||||
|
||||
if (-not (wait_for_ollama)) {
|
||||
Write-Host "Ollama did not become ready within ${OLLAMA_WAIT_SECONDS}s."
|
||||
try { compose logs --tail=200 ollama } catch { }
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "Ollama is responding."
|
||||
|
||||
if (model_present) {
|
||||
Write-Host "Model already present: $MODEL"
|
||||
} else {
|
||||
Write-Host "Pulling Ollama model: $MODEL"
|
||||
try {
|
||||
compose exec -T ollama ollama pull $MODEL
|
||||
} catch {
|
||||
Write-Host "Model pull command failed."
|
||||
try { compose logs --tail=200 ollama } catch { }
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
if (-not (wait_for_model)) {
|
||||
Write-Host "Model ${MODEL} did not appear within ${PULL_WAIT_SECONDS}s."
|
||||
try { compose exec -T ollama ollama list } catch { }
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "Ollama model ready: $MODEL"
|
||||
|
||||
Write-Host "Restarting AI service so it can use the ready Ollama model."
|
||||
compose up -d ai-service
|
||||
|
||||
try {
|
||||
$state = compose ps ai-service --format '{{.State}}' 2>$null | Select-Object -First 1 | ForEach-Object { $_.ToLower().Trim() }
|
||||
if ($state -ne 'running') {
|
||||
Write-Host "AI service is not running after Ollama warmup."
|
||||
try { compose logs --tail=200 ai-service } catch { }
|
||||
exit 1
|
||||
}
|
||||
} catch {
|
||||
Write-Host "Failed to check AI service status."
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "Ollama warmup complete."
|
||||
Reference in New Issue
Block a user