#!/usr/bin/env bash # Start self-hosted LanguageTool (optional) then the rewrite API. set -euo pipefail LT_HOME="${LANGUAGETOOL_HOME:-/opt/languagetool}" LT_PORT="${LANGUAGETOOL_PORT:-8010}" LT_JAVA_OPTS="${LANGUAGETOOL_JAVA_OPTS:--Xms256m -Xmx1024m}" start_languagetool() { if [[ "${LANGUAGE_TOOL_EMBEDDED:-true}" != "true" ]]; then echo "[rewrite-api] Embedded LanguageTool disabled" return 0 fi if [[ ! -f "${LT_HOME}/languagetool-server.jar" ]]; then echo "[rewrite-api] LanguageTool jar not found; rewrites will use mechanics cleanup only" return 0 fi echo "[rewrite-api] Starting LanguageTool on :${LT_PORT} ..." # shellcheck disable=SC2086 java ${LT_JAVA_OPTS} -cp "${LT_HOME}/languagetool-server.jar" \ org.languagetool.server.HTTPServer \ --port "${LT_PORT}" \ --public \ --allow-origin "*" \ >/tmp/languagetool.log 2>&1 & echo $! >/tmp/languagetool.pid export LANGUAGE_TOOL_URL="${LANGUAGE_TOOL_URL:-http://127.0.0.1:${LT_PORT}}" export LANGUAGE_TOOL_ENABLED="${LANGUAGE_TOOL_ENABLED:-true}" for i in $(seq 1 90); do if curl -fsS "http://127.0.0.1:${LT_PORT}/v2/languages" >/dev/null 2>&1; then echo "[rewrite-api] LanguageTool HTTP up (attempt ${i}) — prewarming check..." curl -fsS -X POST "http://127.0.0.1:${LT_PORT}/v2/check" \ --data-urlencode "language=en-US" \ --data-urlencode "text=She go to the store yesterday." \ >/dev/null 2>&1 || true echo "[rewrite-api] LanguageTool ready" return 0 fi sleep 2 done echo "[rewrite-api] WARNING: LanguageTool did not become ready" } start_languagetool HOST="${HOST:-0.0.0.0}" PORT="${PORT:-7860}" exec uvicorn app.main:app --host "${HOST}" --port "${PORT}"