File size: 2,485 Bytes
af61b34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/bin/bash
# Start DCE Intent Classifier Service
# Usage: ./service/run.sh [--reload] [--production]

set -e

# Default configuration
HOST="${HOST:-0.0.0.0}"
PORT="${PORT:-8000}"
WORKERS="${WORKERS:-1}"
MODEL_DIR="${MODEL_DIR:-artifacts/onnx_int8}"
POLICY_PATH="${POLICY_PATH:-artifacts/config/decision_policy.json}"
MAX_LENGTH="${MAX_LENGTH:-64}"

# Scalability configuration
INFERENCE_WORKERS="${INFERENCE_WORKERS:-4}"
ONNX_INTRA_OP_THREADS="${ONNX_INTRA_OP_THREADS:-4}"
ONNX_INTER_OP_THREADS="${ONNX_INTER_OP_THREADS:-1}"
ENABLE_METRICS="${ENABLE_METRICS:-true}"

# Security configuration
REQUIRE_AUTH="${REQUIRE_AUTH:-true}"
API_KEY="${API_KEY:-}"

# Export environment variables
export MODEL_DIR
export POLICY_PATH
export MAX_LENGTH
export INFERENCE_WORKERS
export ONNX_INTRA_OP_THREADS
export ONNX_INTER_OP_THREADS
export ENABLE_METRICS
export REQUIRE_AUTH
export API_KEY

echo "=============================================="
echo "DCE Intent Classifier Service"
echo "=============================================="
echo "Host: $HOST"
echo "Port: $PORT"
echo "Workers: $WORKERS"
echo "Model: $MODEL_DIR"
echo "Policy: $POLICY_PATH"
echo "Max Length: $MAX_LENGTH"
echo "Inference Workers: $INFERENCE_WORKERS"
echo "ONNX Intra-Op Threads: $ONNX_INTRA_OP_THREADS"
echo "Auth Required: $REQUIRE_AUTH"
echo "Metrics Enabled: $ENABLE_METRICS"
echo "=============================================="

# Check if model exists
if [ ! -f "$MODEL_DIR/model.onnx" ]; then
    echo "ERROR: Model not found at $MODEL_DIR/model.onnx"
    echo "Run 'make train && make export_onnx && make quantize' first"
    exit 1
fi

# Check API key in production
if [ "$REQUIRE_AUTH" = "true" ] && [ -z "$API_KEY" ]; then
    echo "WARNING: REQUIRE_AUTH=true but API_KEY is not set!"
    echo "Set API_KEY environment variable or set REQUIRE_AUTH=false for development"
fi

# Start server
if [ "$1" = "--reload" ]; then
    echo "Starting with hot reload (development mode)..."
    uvicorn service.app:app --host "$HOST" --port "$PORT" --reload
elif [ "$1" = "--production" ]; then
    echo "Starting production server with Gunicorn..."
    gunicorn service.app:app \
        -w "$WORKERS" \
        -k uvicorn.workers.UvicornWorker \
        --bind "$HOST:$PORT" \
        --timeout 30 \
        --graceful-timeout 10 \
        --access-logfile - \
        --error-logfile -
else
    echo "Starting server with Uvicorn..."
    uvicorn service.app:app --host "$HOST" --port "$PORT" --workers "$WORKERS"
fi