Files
localgenai/pyinfra/framework/compose/litellm/smoke.sh
2026-06-08 15:31:50 +01:00

51 lines
1.8 KiB
Bash

#!/usr/bin/env bash
# Smoke-test the LiteLLM proxy. /health/readiness for liveness, /v1/models
# for the configured backends, then /health (which dials every backend)
# to surface which ones are actually reachable right now.
set -euo pipefail
HOST="${LITELLM_HOST:-127.0.0.1:4000}"
# Read master key from sibling .env if present, otherwise from environment.
if [[ -z "${LITELLM_MASTER_KEY:-}" && -f "$(dirname "$0")/../.env" ]]; then
# shellcheck disable=SC1091
source "$(dirname "$0")/../.env"
fi
if [[ -z "${LITELLM_MASTER_KEY:-}" ]]; then
echo "[smoke] LITELLM_MASTER_KEY not set — export it or populate /srv/docker/litellm/.env" >&2
exit 1
fi
echo "[smoke] GET /health/readiness on $HOST (proxy alive?)"
curl -fsS "http://$HOST/health/readiness" \
-H "Authorization: Bearer $LITELLM_MASTER_KEY" \
| python3 -m json.tool
echo
echo "[smoke] GET /v1/models (configured model_names)"
curl -fsS "http://$HOST/v1/models" \
-H "Authorization: Bearer $LITELLM_MASTER_KEY" \
| python3 -c "
import json, sys
r = json.load(sys.stdin)
for m in r.get('data', []):
print(f\" - {m.get('id', '?')}\")"
echo
echo "[smoke] GET /health (each backend's reachability — slow, ~10s)"
curl -fsS "http://$HOST/health" \
-H "Authorization: Bearer $LITELLM_MASTER_KEY" \
| python3 -c "
import json, sys
r = json.load(sys.stdin)
healthy = r.get('healthy_endpoints', [])
unhealthy = r.get('unhealthy_endpoints', [])
print(f' healthy: {len(healthy)}')
for e in healthy:
print(f' + {e.get(\"model\", \"?\")}')
print(f' unhealthy: {len(unhealthy)}')
for e in unhealthy:
print(f' - {e.get(\"model\", \"?\")}: {e.get(\"error\", \"?\")[:80]}')"
echo
echo "[smoke] passed — proxy up, model list populated. Unhealthy backends are expected if their compose stacks are down."