File size: 2,998 Bytes
abcd0c2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a29baaf
 
 
 
 
abcd0c2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env bash
# MarkItDown API - Production Startup Script
#
# Environment variable overrides:
#   LOG_DIR   - directory for persistent log files  (default: /app/logs)
#   HOST      - bind address                         (default: 0.0.0.0)
#   PORT      - listen port                          (default: 7860)
#   WORKERS   - uvicorn worker count                 (default: 1)
#   LOG_LEVEL - uvicorn log level                    (default: info)

set -euo pipefail

# ---------------------------------------------------------------------------
# Logging helpers
# ---------------------------------------------------------------------------
LOG_DIR="${LOG_DIR:-/app/logs}"
mkdir -p "$LOG_DIR"
LOG_FILE="$LOG_DIR/startup.log"

_log() {
    local level="$1"
    shift
    local ts
    ts="$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
    local line="[$ts] [$level] $*"
    echo "$line"
    echo "$line" >> "$LOG_FILE"
}

log_info()  { _log "INFO " "$@"; }
log_ok()    { _log "OK   " "$@"; }
log_warn()  { _log "WARN " "$@"; }
log_err()   { _log "ERROR" "$@"; }
log_step()  { echo ""; _log "STEP " "---- $* ----"; }

# ---------------------------------------------------------------------------
# Print startup banner
# ---------------------------------------------------------------------------
python -c "from banner import print_banner; print_banner()" 2>/dev/null || true

# ---------------------------------------------------------------------------
# Step 1: Verify core Python dependencies
# ---------------------------------------------------------------------------
log_step "1/2  Verifying Python dependencies"

if python -c "import markitdown, fastapi, httpx" 2>/dev/null; then
    log_ok "Core dependencies verified."
else
    log_err "Missing core dependencies. Ensure requirements.txt has been installed."
    exit 1
fi

# ---------------------------------------------------------------------------
# Step 2: Smoke-test imports
# ---------------------------------------------------------------------------
log_step "2/2  Running import smoke test"

python >> "$LOG_FILE" 2>&1 << PYEOF
import sys
try:
    import markitdown, fastapi, httpx, pandas
    print("[smoke-test] All core imports successful.")
except ImportError as exc:
    print(f"[smoke-test] Import error: {exc}")
    sys.exit(1)
PYEOF

if [ $? -eq 0 ]; then
    log_ok "Import smoke test passed."
else
    log_warn "Import smoke test failed. Check $LOG_FILE for details. Continuing startup."
fi

# ---------------------------------------------------------------------------
# Start uvicorn
# ---------------------------------------------------------------------------
log_step "Starting uvicorn"

HOST="${HOST:-0.0.0.0}"
PORT="${PORT:-7860}"
WORKERS="${WORKERS:-1}"
LOG_LEVEL="${LOG_LEVEL:-info}"

log_info "Binding to $HOST:$PORT | workers=$WORKERS | log_level=$LOG_LEVEL"

exec python -m uvicorn api.server:app \
    --host "$HOST" \
    --port "$PORT" \
    --workers "$WORKERS" \
    --log-level "$LOG_LEVEL" \
    --access-log