#!/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