80 lines
1.8 KiB
Bash
Executable File
80 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
MODEL="${OLLAMA_MODEL:-qwen2.5:7b}"
|
|
OLLAMA_WAIT_SECONDS="${OLLAMA_WAIT_SECONDS:-180}"
|
|
PULL_WAIT_SECONDS="${OLLAMA_PULL_WAIT_SECONDS:-1800}"
|
|
|
|
compose() {
|
|
docker compose "$@"
|
|
}
|
|
|
|
wait_for_ollama() {
|
|
local deadline=$((SECONDS + OLLAMA_WAIT_SECONDS))
|
|
while [ "$SECONDS" -lt "$deadline" ]; do
|
|
if compose exec -T ollama ollama list >/dev/null 2>&1; then
|
|
return 0
|
|
fi
|
|
sleep 3
|
|
done
|
|
return 1
|
|
}
|
|
|
|
model_present() {
|
|
compose exec -T ollama ollama list 2>/dev/null | awk 'NR>1 {print $1}' | grep -Fx "$MODEL" >/dev/null 2>&1
|
|
}
|
|
|
|
wait_for_model() {
|
|
local deadline=$((SECONDS + PULL_WAIT_SECONDS))
|
|
while [ "$SECONDS" -lt "$deadline" ]; do
|
|
if model_present; then
|
|
return 0
|
|
fi
|
|
sleep 5
|
|
done
|
|
return 1
|
|
}
|
|
|
|
echo "Starting Ollama service..."
|
|
compose up -d ollama
|
|
|
|
if ! wait_for_ollama; then
|
|
echo "Ollama did not become ready within ${OLLAMA_WAIT_SECONDS}s."
|
|
compose logs --tail=200 ollama || true
|
|
exit 1
|
|
fi
|
|
|
|
echo "Ollama is responding."
|
|
|
|
if model_present; then
|
|
echo "Model already present: $MODEL"
|
|
else
|
|
echo "Pulling Ollama model: $MODEL"
|
|
compose exec -T ollama ollama pull "$MODEL" || {
|
|
echo "Model pull command failed."
|
|
compose logs --tail=200 ollama || true
|
|
exit 1
|
|
}
|
|
fi
|
|
|
|
if ! wait_for_model; then
|
|
echo "Model ${MODEL} did not appear within ${PULL_WAIT_SECONDS}s."
|
|
compose exec -T ollama ollama list || true
|
|
exit 1
|
|
fi
|
|
|
|
echo "Ollama model ready: $MODEL"
|
|
|
|
echo "Restarting AI service so it can use the ready Ollama model."
|
|
compose up -d ai-service
|
|
|
|
if ! compose ps ai-service --format '{{.State}}' 2>/dev/null | head -n 1 | tr '[:upper:]' '[:lower:]' | grep -qx 'running'; then
|
|
echo "AI service is not running after Ollama warmup."
|
|
compose logs --tail=200 ai-service || true
|
|
exit 1
|
|
fi
|
|
|
|
echo "Ollama warmup complete."
|