File size: 4,645 Bytes
f762b8d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/usr/bin/env bash
# OpenEnv Hackathon Pre-Submission Validation Script
# Based on Meta x Scaler Hackathon Round 1 Guidelines

# Colors for output
GREEN='\033[0;32m'
RED='\033[0;31m'
BOLD='\033[1m'
NC='\033[0m'

echo -e "${BOLD}Starting Validation...${NC}\n"

# ─────────────────────────────────────────────
# STEP 1: Prerequisite Check
# ─────────────────────────────────────────────
echo -e "${BOLD}Step 1/4: Checking Prerequisites...${NC}"

if ! command -v docker &>/dev/null; then
    echo -e "${RED}[FAIL] Docker command not found. Install it: https://docs.docker.com/get-docker/${NC}"
    exit 1
fi

if ! command -v openenv &>/dev/null; then
    echo -e "${RED}[FAIL] openenv-core not found. Install it: pip install openenv-core${NC}"
    exit 1
fi

echo -e "${GREEN}[PASS] Prerequisites found.${NC}\n"

# ─────────────────────────────────────────────
# STEP 2: Docker Build Check
# ─────────────────────────────────────────────
echo -e "${BOLD}Step 2/4: Running Docker Build...${NC}"

if [ -f "Dockerfile" ]; then
    DOCKER_CONTEXT="."
elif [ -f "server/Dockerfile" ]; then
    DOCKER_CONTEXT="server"
else
    echo -e "${RED}[FAIL] No Dockerfile found in root or server/ directory.${NC}"
    exit 1
fi

docker build -t openenv-validator "$DOCKER_CONTEXT"

if [ $? -eq 0 ]; then
    echo -e "${GREEN}[PASS] Docker build succeeded.${NC}\n"
else
    echo -e "${RED}[FAIL] Docker build failed. Check your Dockerfile.${NC}"
    exit 1
fi

# ─────────────────────────────────────────────
# STEP 3: OpenEnv Spec Validation
# ─────────────────────────────────────────────
echo -e "${BOLD}Step 3/4: Running openenv validate...${NC}"

openenv validate

if [ $? -eq 0 ]; then
    echo -e "${GREEN}[PASS] OpenEnv spec compliance verified (yaml, models, endpoints).${NC}\n"
else
    echo -e "${RED}[FAIL] OpenEnv validation failed. Check openenv.yaml and models.py.${NC}"
    exit 1
fi

# ─────────────────────────────────────────────
# STEP 4: Baseline Inference & Log Format Check
# ─────────────────────────────────────────────
echo -e "${BOLD}Step 4/4: Running Baseline Inference Check...${NC}"

if [ ! -f "inference.py" ]; then
    echo -e "${RED}[FAIL] inference.py NOT found in root directory.${NC}"
    exit 1
fi

# Run inference and capture output to check STDOUT format
OUTPUT=$(python inference.py 2>&1)
EXIT_CODE=$?

if [ $EXIT_CODE -ne 0 ]; then
    echo -e "${RED}[FAIL] inference.py failed to execute without errors.${NC}"
    echo "$OUTPUT"
    exit 1
fi

# Verify mandatory log tags: [START], [STEP], [END]
if [[ "$OUTPUT" == *"[START]"* ]] && [[ "$OUTPUT" == *"[STEP]"* ]] && [[ "$OUTPUT" == *"[END]"* ]]; then
    echo -e "${GREEN}[PASS] Mandatory STDOUT log format ([START], [STEP], [END]) detected.${NC}"
else
    echo -e "${RED}[FAIL] STDOUT format incorrect. Must strictly follow [START], [STEP], [END] lines.${NC}"
    exit 1
fi

# Verify score is within valid 0.0–1.0 range
if [[ "$OUTPUT" =~ "score="([0-9]*\.[0-9]+|[0-9]+) ]]; then
    SCORE=${BASH_REMATCH[1]}
    if awk "BEGIN {exit !($SCORE >= 0.0 && $SCORE <= 1.0)}"; then
        echo -e "${GREEN}[PASS] Score ($SCORE) is within valid 0.0-1.0 range.${NC}"
    else
        echo -e "${RED}[FAIL] Invalid score: $SCORE. Must be between 0.0 and 1.0.${NC}"
        exit 1
    fi
fi

# ─────────────────────────────────────────────
# ALL CHECKS PASSED
# ─────────────────────────────────────────────
echo -e "\n${GREEN}${BOLD}========================================${NC}"
echo -e "${GREEN}${BOLD}  ALL 4/4 CHECKS PASSED!${NC}"
echo -e "${GREEN}${BOLD}  YOUR SUBMISSION IS READY.${NC}"
echo -e "${GREEN}${BOLD}========================================${NC}"