compliance-auditor-env / scripts /validate-submission.sh
Itachi-1824
feat: /grader endpoint, validate-submission.sh, session cleanup, final polish
2dc4e1e
Raw
History Blame Contribute Delete
3.53 kB
#!/usr/bin/env bash
# Pre-submission validation for EU AI Act Compliance Auditor
# Usage: bash scripts/validate-submission.sh [SPACE_URL]
set -e
SPACE_URL="${1:-https://itachi1824-compliance-auditor-env.hf.space}"
BOLD='\033[1m'
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
pass() { echo -e " ${GREEN}${NC} $1"; }
fail() { echo -e " ${RED}${NC} $1"; exit 1; }
echo -e "${BOLD}Pre-submission validation${NC}"
echo "Space: $SPACE_URL"
echo ""
# 1. Required files
echo -e "${BOLD}Step 1/5: Required files${NC}"
[ -f "inference.py" ] && pass "inference.py" || fail "inference.py missing"
[ -f "Dockerfile" ] && pass "Dockerfile" || fail "Dockerfile missing"
[ -f "openenv.yaml" ] && pass "openenv.yaml" || fail "openenv.yaml missing"
[ -f "README.md" ] && pass "README.md" || fail "README.md missing"
[ -f "pyproject.toml" ] && pass "pyproject.toml" || fail "pyproject.toml missing"
[ -f "models.py" ] && pass "models.py" || fail "models.py missing"
[ -f "client.py" ] && pass "client.py" || fail "client.py missing"
[ -d "server" ] && pass "server/" || fail "server/ missing"
# 2. openenv validate
echo ""
echo -e "${BOLD}Step 2/5: openenv validate${NC}"
if command -v openenv &>/dev/null || python -m openenv.cli validate &>/dev/null; then
python -m openenv.cli validate 2>&1 | grep -q "OK" && pass "openenv validate" || fail "openenv validate failed"
else
echo " ⚠ openenv CLI not installed, skipping"
fi
# 3. Space health
echo ""
echo -e "${BOLD}Step 3/5: Space health${NC}"
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$SPACE_URL/health")
[ "$HTTP_CODE" = "200" ] && pass "/health returns 200" || fail "/health returned $HTTP_CODE"
TASKS=$(curl -s "$SPACE_URL/tasks" | python -c "import sys,json; print(len(json.load(sys.stdin)['tasks']))" 2>/dev/null)
[ "$TASKS" -ge 3 ] && pass "/tasks returns $TASKS tasks (>=3)" || fail "Only $TASKS tasks (need 3+)"
# 4. Reset + Step
echo ""
echo -e "${BOLD}Step 4/5: Reset + API${NC}"
RESET=$(curl -s -X POST "$SPACE_URL/api/reset" -H "Content-Type: application/json" -d '{"difficulty":"easy"}')
SID=$(echo "$RESET" | python -c "import sys,json; print(json.load(sys.stdin)['session_id'])" 2>/dev/null)
[ -n "$SID" ] && pass "/api/reset creates session" || fail "/api/reset failed"
TOOL=$(curl -s -X POST "$SPACE_URL/api/call_tool" -H "Content-Type: application/json" -d "{\"session_id\":\"$SID\",\"tool_name\":\"get_system_overview\",\"arguments\":{}}")
echo "$TOOL" | python -c "import sys,json; d=json.load(sys.stdin); assert 'result' in d" 2>/dev/null && pass "/api/call_tool works" || fail "/api/call_tool failed"
# 5. Stdout format check
echo ""
echo -e "${BOLD}Step 5/5: Stdout format${NC}"
grep -q "API_BASE_URL" inference.py && pass "API_BASE_URL in inference.py" || fail "Missing API_BASE_URL"
grep -q "MODEL_NAME" inference.py && pass "MODEL_NAME in inference.py" || fail "Missing MODEL_NAME"
grep -q "HF_TOKEN" inference.py && pass "HF_TOKEN in inference.py" || fail "Missing HF_TOKEN"
grep -q '\[START\]' inference.py && pass "[START] format present" || fail "Missing [START]"
grep -q '\[STEP\]' inference.py && pass "[STEP] format present" || fail "Missing [STEP]"
grep -q '\[END\]' inference.py && pass "[END] format present" || fail "Missing [END]"
echo ""
echo -e "${BOLD}========================================${NC}"
echo -e "${GREEN}${BOLD} All checks passed!${NC}"
echo -e "${GREEN}${BOLD} Ready to submit.${NC}"
echo -e "${BOLD}========================================${NC}"