diff mrjunejune/inference_stack.sh @ 261:b401627fc49e

Add JRPG mock flows and interactive previews Add scripted mock SSE commands, custom event forwarding, animated chat turns, full-height message navigation, and a cyberpunk resume dossier. Co-authored-by: Copilot <[email protected]>
author MrJuneJune <mrjunejune@users.noreply.github.com>
date Wed, 05 Aug 2026 20:38:32 -0700
parents 1f9877b637e9
children 04fee26ecce0
line wrap: on
line diff
--- a/mrjunejune/inference_stack.sh	Wed Aug 05 09:19:41 2026 -0700
+++ b/mrjunejune/inference_stack.sh	Wed Aug 05 20:38:32 2026 -0700
@@ -8,24 +8,27 @@
 litellm_zip="$(realpath "$5")"
 litellm_config="$(realpath "$6")"
 python="$(realpath "$7")"
+mock_sidecar="${8:-}"
+if (( $# >= 8 )); then
+  shift 8
+else
+  shift 7
+fi
 
-: "${LITELLM_MASTER_KEY:?LITELLM_MASTER_KEY must be set}"
+mode=live
+if [[ "${1:-}" == "--mock" ]]; then
+  mode=mock
+  shift
+fi
+if (( $# != 0 )); then
+  echo "Usage: bazel run //mrjunejune:run_inference_stack -- [--mock]" >&2
+  exit 2
+fi
 
 litellm_host="${LITELLM_HOST:-127.0.0.1}"
 litellm_port="${LITELLM_PORT:-4000}"
 default_state_root="${XDG_STATE_HOME:-$HOME/.local/state}/mrjunejune/inference"
 state_root="${MRJUNEJUNE_INFERENCE_STATE:-$default_state_root}"
-token_dir="${GITHUB_COPILOT_TOKEN_DIR:-$state_root/litellm-copilot}"
-mkdir -p "$state_root/copilot" "$token_dir"
-chmod 700 "$state_root" "$state_root/copilot" "$token_dir"
-
-export GITHUB_COPILOT_TOKEN_DIR="$token_dir"
-if [[ ! -s "$GITHUB_COPILOT_TOKEN_DIR/access-token" ]]; then
-  echo "GitHub Copilot is not authenticated for LiteLLM." >&2
-  echo "Run: bazel run //mrjunejune/inference:litellm_proxy -- --authenticate --token-dir \"$GITHUB_COPILOT_TOKEN_DIR\"" >&2
-  exit 1
-fi
-
 litellm_pid=
 server_pid=
 
@@ -51,47 +54,78 @@
 }
 trap cleanup EXIT INT TERM
 
-setsid "$python" "$litellm_zip" \
-  --config "$litellm_config" \
-  --host "$litellm_host" \
-  --port "$litellm_port" &
-litellm_pid=$!
-
-for _ in $(seq 1 150); do
-  if ! kill -0 "$litellm_pid" 2>/dev/null; then
-    echo "LiteLLM exited before becoming ready" >&2
+if [[ "$mode" == "mock" ]]; then
+  if [[ -z "$mock_sidecar" ]]; then
+    echo "Mock sidecar is unavailable in this runtime" >&2
     exit 1
   fi
-  if curl --fail --silent \
+  mock_state="${MRJUNEJUNE_MOCK_STATE:-$state_root/mock}"
+  mkdir -p "$mock_state"
+  chmod 700 "$mock_state"
+  export MRJUNEJUNE_DB_PATH="${MRJUNEJUNE_DB_PATH:-$mock_state/conversations.db}"
+  if [[ "$mock_sidecar" == /* ]]; then
+    export MRJUNEJUNE_INFERENCE_SIDECAR_PATH="$mock_sidecar"
+  else
+    export MRJUNEJUNE_INFERENCE_SIDECAR_PATH="$PWD/$mock_sidecar"
+  fi
+  export MRJUNEJUNE_COPILOT_CLI_PATH="$MRJUNEJUNE_INFERENCE_SIDECAR_PATH"
+  export MRJUNEJUNE_ALLOW_ANONYMOUS_INFERENCE=1
+  echo "Starting mock inference at http://127.0.0.1:${MRJUNEJUNE_PORT:-6969}/jrpg"
+else
+  : "${LITELLM_MASTER_KEY:?LITELLM_MASTER_KEY must be set}"
+  token_dir="${GITHUB_COPILOT_TOKEN_DIR:-$state_root/litellm-copilot}"
+  mkdir -p "$state_root/copilot" "$token_dir"
+  chmod 700 "$state_root" "$state_root/copilot" "$token_dir"
+
+  export GITHUB_COPILOT_TOKEN_DIR="$token_dir"
+  if [[ ! -s "$GITHUB_COPILOT_TOKEN_DIR/access-token" ]]; then
+    echo "GitHub Copilot is not authenticated for LiteLLM." >&2
+    echo "Run: bazel run //mrjunejune/inference:litellm_proxy -- --authenticate --token-dir \"$GITHUB_COPILOT_TOKEN_DIR\"" >&2
+    exit 1
+  fi
+
+  setsid "$python" "$litellm_zip" \
+    --config "$litellm_config" \
+    --host "$litellm_host" \
+    --port "$litellm_port" &
+  litellm_pid=$!
+
+  for _ in $(seq 1 150); do
+    if ! kill -0 "$litellm_pid" 2>/dev/null; then
+      echo "LiteLLM exited before becoming ready" >&2
+      exit 1
+    fi
+    if curl --fail --silent \
+        --connect-timeout 1 \
+        --max-time 2 \
+        "http://${litellm_host}:${litellm_port}/health/readiness" \
+        >/dev/null; then
+      break
+    fi
+    sleep 0.1
+  done
+
+  if ! curl --fail --silent \
       --connect-timeout 1 \
       --max-time 2 \
       "http://${litellm_host}:${litellm_port}/health/readiness" \
       >/dev/null; then
-    break
+    echo "LiteLLM readiness timed out" >&2
+    exit 1
   fi
-  sleep 0.1
-done
 
-if ! curl --fail --silent \
-    --connect-timeout 1 \
-    --max-time 2 \
-    "http://${litellm_host}:${litellm_port}/health/readiness" \
-    >/dev/null; then
-  echo "LiteLLM readiness timed out" >&2
-  exit 1
+  export MRJUNEJUNE_PYTHON_PATH="$python"
+  export MRJUNEJUNE_SIDECAR_ZIP="$sidecar_zip"
+  export MRJUNEJUNE_INFERENCE_SIDECAR_PATH="$sidecar_launcher"
+  export MRJUNEJUNE_COPILOT_CLI_PATH="$copilot_cli"
+  export COPILOT_SIDECAR_HOME="$state_root/copilot"
+  export LITELLM_BASE_URL="http://${litellm_host}:${litellm_port}/v1"
+  export LITELLM_MODEL="${LITELLM_MODEL:-jrpg-copilot}"
+  export LITELLM_WIRE_API="${LITELLM_WIRE_API:-completions}"
+  export LITELLM_API_KEY="$LITELLM_MASTER_KEY"
+  export MRJUNEJUNE_ALLOW_ANONYMOUS_INFERENCE="${MRJUNEJUNE_ALLOW_ANONYMOUS_INFERENCE:-0}"
 fi
 
-export MRJUNEJUNE_PYTHON_PATH="$python"
-export MRJUNEJUNE_SIDECAR_ZIP="$sidecar_zip"
-export MRJUNEJUNE_INFERENCE_SIDECAR_PATH="$sidecar_launcher"
-export MRJUNEJUNE_COPILOT_CLI_PATH="$copilot_cli"
-export COPILOT_SIDECAR_HOME="$state_root/copilot"
-export LITELLM_BASE_URL="http://${litellm_host}:${litellm_port}/v1"
-export LITELLM_MODEL="${LITELLM_MODEL:-jrpg-copilot}"
-export LITELLM_WIRE_API="${LITELLM_WIRE_API:-completions}"
-export LITELLM_API_KEY="$LITELLM_MASTER_KEY"
-export MRJUNEJUNE_ALLOW_ANONYMOUS_INFERENCE="${MRJUNEJUNE_ALLOW_ANONYMOUS_INFERENCE:-0}"
-
 setsid "$server" &
 server_pid=$!
 while true; do
@@ -102,7 +136,7 @@
     set -e
     exit "$server_status"
   fi
-  if ! kill -0 "$litellm_pid" 2>/dev/null; then
+  if [[ -n "$litellm_pid" ]] && ! kill -0 "$litellm_pid" 2>/dev/null; then
     wait "$litellm_pid" 2>/dev/null || true
     echo "LiteLLM exited while the public server was running" >&2
     exit 1