54 lines
1.9 KiB
Bash
Executable File
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}"
|