Files

54 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
PROJECT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
LANGGRAPH_CONFIG="${PROJECT_DIR}/EvoScientist/langgraph_dev/langgraph.web.json"
HOST="${EVOSCIENTIST_LANGGRAPH_HOST:-127.0.0.1}"
PORT="${EVOSCIENTIST_LANGGRAPH_DEV_PORT:-3076}"
WEB_ENV="${PROJECT_DIR}/../Ai4Sci-Web/.env"
WEB_PROJECT="${PROJECT_DIR}/../Ai4Sci-Web"
N_JOBS="${EVOSCIENTIST_LANGGRAPH_JOBS_PER_WORKER:-6}"
WEB_VENV="${PROJECT_DIR}/../Ai4Sci-Web/.venv"
if [[ ! -x "${WEB_VENV}/bin/langgraph" ]]; then
echo "Web LangGraph executable not found: ${WEB_VENV}/bin/langgraph" >&2
echo "Run 'uv sync --group host-runtime' in Ai4Sci-Web first." >&2
exit 1
fi
cd "${PROJECT_DIR}"
# Ask before stopping the process listening on PORT. Matching every connection
# would also terminate Gateway while it is connected to this Runtime.
PIDS="$(lsof -tiTCP:"${PORT}" -sTCP:LISTEN 2>/dev/null || true)"
if [[ -n "${PIDS}" ]]; then
echo "Port ${PORT} is already in use by PID(s): ${PIDS}" >&2
ANSWER=""
read -r -p "Kill the process(es) using port ${PORT}? [y/N] " ANSWER || true
case "${ANSWER}" in
[yY]|[yY][eE][sS])
echo "Killing process(es) on port ${PORT}: ${PIDS}"
kill ${PIDS}
sleep 1
;;
*)
echo "LangGraph not started; process(es) on port ${PORT} were left running." >&2
exit 1
;;
esac
fi
# The Web Gateway always supplies a verified conversation workspace scope.
export EVOSCIENTIST_DEPLOY_MODE="${EVOSCIENTIST_DEPLOY_MODE:-full}"
export EVOSCIENTIST_WORKSPACE_DIR="${EVOSCIENTIST_WORKSPACE_DIR:-${PROJECT_DIR}/../.ai4sci/workspace}"
exec uv run --project "${WEB_PROJECT}" --group host-runtime \
--env-file "${WEB_ENV}" langgraph dev \
--config "${LANGGRAPH_CONFIG}" \
--host "${HOST}" \
--port "${PORT}" \
--no-browser \
--no-reload \
--allow-blocking \
--n-jobs-per-worker "${N_JOBS}"