Daily Docker Model Runner Health Check #66
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Daily Docker Model Runner Health Check | |
permissions: | |
contents: read | |
on: | |
schedule: | |
# Run daily at 6 AM UTC | |
- cron: '0 6 * * *' | |
workflow_dispatch: | |
inputs: | |
test_model: | |
description: 'Model to test with (default: ai/smollm2:360M-Q4_K_M)' | |
required: false | |
type: string | |
default: 'ai/smollm2:360M-Q4_K_M' | |
jobs: | |
dmr-health-check: | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
steps: | |
- name: Set up Docker | |
uses: docker/setup-docker-action@v4 | |
- name: Install docker-model-plugin | |
run: | | |
echo "Installing docker-model-plugin..." | |
# Add Docker's official GPG key: | |
sudo apt-get update | |
sudo apt-get install ca-certificates curl | |
sudo install -m 0755 -d /etc/apt/keyrings | |
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc | |
sudo chmod a+r /etc/apt/keyrings/docker.asc | |
# Add the repository to Apt sources: | |
echo \ | |
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ | |
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ | |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null | |
sudo apt-get update | |
sudo apt-get install -y docker-model-plugin | |
echo "Installation completed successfully" | |
- name: Test docker model version | |
run: | | |
echo "Testing docker model version command..." | |
sudo docker model version | |
# Verify the command returns successfully | |
if [ $? -eq 0 ]; then | |
echo "✅ docker model version command works correctly" | |
else | |
echo "❌ docker model version command failed" | |
exit 1 | |
fi | |
- name: Test model pull and run | |
run: | | |
MODEL="${{ github.event.inputs.test_model || 'ai/smollm2:360M-Q4_K_M' }}" | |
echo "Testing with model: $MODEL" | |
# Test model pull | |
echo "Pulling model..." | |
sudo docker model pull "$MODEL" | |
if [ $? -eq 0 ]; then | |
echo "✅ Model pull successful" | |
else | |
echo "❌ Model pull failed" | |
exit 1 | |
fi | |
# Test basic model run (with timeout to avoid hanging) | |
echo "Testing docker model run..." | |
timeout 60s sudo docker model run "$MODEL" "Give me a fact about whales." || { | |
exit_code=$? | |
if [ $exit_code -eq 124 ]; then | |
echo "✅ Model run test completed (timed out as expected for non-interactive test)" | |
else | |
echo "❌ Model run failed with exit code: $exit_code" | |
exit 1 | |
fi | |
} | |
- name: Test API endpoint | |
run: | | |
MODEL="${{ github.event.inputs.test_model || 'ai/smollm2:360M-Q4_K_M' }}" | |
echo "Testing API endpoint with model: $MODEL" | |
# Test API call with curl | |
echo "Testing API call..." | |
RESPONSE=$(curl -s http://localhost:12434/engines/llama.cpp/v1/chat/completions \ | |
-H "Content-Type: application/json" \ | |
-d "{ | |
\"model\": \"$MODEL\", | |
\"messages\": [ | |
{ | |
\"role\": \"user\", | |
\"content\": \"Say hello\" | |
} | |
], | |
\"top_k\": 1, | |
\"temperature\": 0 | |
}") | |
if [ $? -eq 0 ]; then | |
echo "✅ API call successful" | |
echo "Response received: $RESPONSE" | |
# Check if response contains "hello" (case-insensitive) | |
if echo "$RESPONSE" | grep -qi "hello"; then | |
echo "✅ Response contains 'hello' (case-insensitive)" | |
else | |
echo "❌ Response does not contain 'hello'" | |
echo "Full response: $RESPONSE" | |
exit 1 | |
fi | |
else | |
echo "❌ API call failed" | |
exit 1 | |
fi | |
- name: Test model cleanup | |
run: | | |
MODEL="${{ github.event.inputs.test_model || 'ai/smollm2:360M-Q4_K_M' }}" | |
echo "Cleaning up test model..." | |
sudo docker model rm "$MODEL" || echo "Model removal failed or model not found" | |
# Verify model was removed | |
echo "Verifying model cleanup..." | |
sudo docker model ls | |
echo "✅ Model cleanup completed" | |
- name: Report success | |
if: success() | |
run: | | |
echo "🎉 Docker Model Runner daily health check completed successfully!" | |
echo "All tests passed:" | |
echo " ✅ docker-model-plugin installation successful" | |
echo " ✅ docker model version command working" | |
echo " ✅ Model pull and run operations successful" | |
echo " ✅ API endpoint operations successful" | |
echo " ✅ Cleanup operations successful" |