Files
jobtrackingapp/scripts/start-ollama-cv.ps1
T
2026-07-02 21:21:47 +02:00

100 lines
2.8 KiB
PowerShell

# 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."