File size: 5,964 Bytes
3df5819
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
114
115
116
117
118
119
120
121
122
123
124
#!/usr/bin/env bash
# ═══════════════════════════════════════════════════════════════════════════
# start.sh β€” Inference launcher for the Dyslexia Academic Writing Corrector
# ═══════════════════════════════════════════════════════════════════════════
#
# Usage:
#   bash start.sh --cli                  # Interactive REPL mode
#   bash start.sh --api                  # FastAPI server mode
#   bash start.sh --cli --text "..."     # Single text correction
#   bash start.sh --api --port 8080      # Custom port
#
set -euo pipefail

# ── Defaults ────────────────────────────────────────────────────────────────
MODE=""
CONFIG="configs/inference_config.yaml"
TEXT=""
MASTER_COPY=""
STYLE_ALPHA="0.6"
PORT="8000"
WORKERS="1"

# ── Colors ──────────────────────────────────────────────────────────────────
GREEN='\033[0;32m'
CYAN='\033[0;36m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BOLD='\033[1m'
NC='\033[0m'

# ── Parse arguments ────────────────────────────────────────────────────────
while [[ $# -gt 0 ]]; do
    case $1 in
        --cli)         MODE="cli"; shift ;;
        --api)         MODE="api"; shift ;;
        --config)      CONFIG="$2"; shift 2 ;;
        --config=*)    CONFIG="${1#*=}"; shift ;;
        --text)        TEXT="$2"; shift 2 ;;
        --text=*)      TEXT="${1#*=}"; shift ;;
        --master-copy) MASTER_COPY="$2"; shift 2 ;;
        --port)        PORT="$2"; shift 2 ;;
        --port=*)      PORT="${1#*=}"; shift ;;
        --workers)     WORKERS="$2"; shift 2 ;;
        --alpha)       STYLE_ALPHA="$2"; shift 2 ;;
        -h|--help)
            echo "Usage: bash start.sh [--cli|--api] [OPTIONS]"
            echo ""
            echo "Modes:"
            echo "  --cli          Interactive REPL or single-text correction"
            echo "  --api          Start FastAPI server"
            echo ""
            echo "Options:"
            echo "  --config PATH  Config file (default: configs/inference_config.yaml)"
            echo "  --text TEXT    Text to correct (CLI mode, skip interactive)"
            echo "  --master-copy  Optional master copy for style matching"
            echo "  --alpha FLOAT  Style blend weight 0-1 (default: 0.6)"
            echo "  --port PORT    API server port (default: 8000)"
            echo "  --workers N    API server workers (default: 1)"
            exit 0
            ;;
        *) echo -e "${RED}Unknown option: $1${NC}"; exit 1 ;;
    esac
done

# ── Python detection ───────────────────────────────────────────────────────
if command -v python3 &>/dev/null; then
    PYTHON=python3
elif command -v python &>/dev/null; then
    PYTHON=python
else
    echo -e "${RED}Python not found!${NC}"
    exit 1
fi

# ── Mode selection ─────────────────────────────────────────────────────────
if [ -z "$MODE" ]; then
    echo ""
    echo -e "${BOLD}╔══════════════════════════════════════════════════════════╗${NC}"
    echo -e "${BOLD}β•‘  Dyslexia Academic Writing Corrector β€” Inference        β•‘${NC}"
    echo -e "${BOLD}β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•${NC}"
    echo ""
    echo -e "  ${CYAN}1)${NC} Interactive CLI (REPL)"
    echo -e "  ${CYAN}2)${NC} API Server (FastAPI)"
    echo ""
    read -rp "  Select mode [1/2]: " choice
    case "$choice" in
        1) MODE="cli" ;;
        2) MODE="api" ;;
        *) MODE="cli" ;;
    esac
fi

# ── Check model exists ────────────────────────────────────────────────────
if [ ! -d "checkpoints/best_model" ]; then
    echo -e "${YELLOW}[WARN] No trained model found at checkpoints/best_model${NC}"
    echo -e "${YELLOW}       Will use base model. Run train.sh first for best results.${NC}"
fi

# ── Launch ─────────────────────────────────────────────────────────────────
case "$MODE" in
    cli)
        echo -e "${GREEN}Starting CLI inference...${NC}"
        CLI_ARGS="--config $CONFIG --style-alpha $STYLE_ALPHA"
        if [ -n "$TEXT" ]; then
            CLI_ARGS="$CLI_ARGS --text \"$TEXT\""
        fi
        if [ -n "$MASTER_COPY" ]; then
            CLI_ARGS="$CLI_ARGS --master-copy \"$MASTER_COPY\""
        fi
        eval $PYTHON scripts/run_inference.py $CLI_ARGS
        ;;
    api)
        echo -e "${GREEN}Starting API server on port $PORT...${NC}"
        echo -e "  Docs:   ${CYAN}http://localhost:$PORT/docs${NC}"
        echo -e "  Health: ${CYAN}http://localhost:$PORT/health${NC}"
        echo ""
        $PYTHON -m uvicorn src.api.main:app \
            --host 0.0.0.0 \
            --port "$PORT" \
            --workers "$WORKERS" \
            --log-level info
        ;;
esac