DCE / service /run.sh
That guy James Bond :)
Deploy Medical Intent Escalation API
af61b34
Raw
History Blame Contribute Delete
2.49 kB
#!/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