echo6-docs/engine/bootstrap.sh

123 lines
4.6 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
# bootstrap.sh — Echo6 Vault Engine setup
#
# Idempotent setup script. Safe to re-run; each step is guarded.
# Run from any directory. Script locates itself via SCRIPT_DIR.
#
# Steps:
# 1. Verify services reachable (ollama, TEI, qdrant)
# 2. [DISABLED] Pull base model (~8 GB) — enable when ready
# 3. [DISABLED] Build vault-tagger modelfile — depends on step 2
# 4. TODO: Install Python deps for lib/
# 5. TODO: Generate initial vocab (lib/vocab_gen.py)
# 6. TODO: Install git pre-commit hook
# 7. TODO: Install cron job from config.yaml schedule
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONFIG="${SCRIPT_DIR}/config.yaml"
MODELFILE="${SCRIPT_DIR}/Modelfile"
echo "==> Echo6 Vault Engine bootstrap"
echo " engine_dir : ${SCRIPT_DIR}"
echo " config : ${CONFIG}"
echo ""
# ---------------------------------------------------------------------------
# Step 1 — Verify services reachable
# ---------------------------------------------------------------------------
echo "[1/7] Checking service endpoints..."
check_endpoint() {
local name="$1"
local url="$2"
if curl -sf --max-time 5 "$url" > /dev/null 2>&1; then
echo " OK ${name} (${url})"
else
echo " FAIL ${name} (${url}) — is the service running?"
return 1
fi
}
check_endpoint "ollama" "http://localhost:11434"
check_endpoint "TEI/bge-m3" "http://localhost:8090/health"
check_endpoint "qdrant" "http://localhost:6333"
echo ""
# ---------------------------------------------------------------------------
# Step 2 — Pull base model (DISABLED — enable when ready to pull ~8 GB)
# ---------------------------------------------------------------------------
# Uncomment the following block together with Step 3 when ready:
#
# echo "[2/7] Pulling base model qwen2.5:7b-instruct-q8_0..."
# ollama pull qwen2.5:7b-instruct-q8_0
# echo ""
echo "[2/7] SKIPPED — base model pull disabled. Uncomment in bootstrap.sh when ready."
echo ""
# ---------------------------------------------------------------------------
# Step 3 — Build vault-tagger from Modelfile (DISABLED — depends on step 2)
# ---------------------------------------------------------------------------
# Uncomment together with Step 2:
#
# echo "[3/7] Building vault-tagger model from Modelfile..."
# ollama create vault-tagger -f "${MODELFILE}"
# echo ""
echo "[3/7] SKIPPED — vault-tagger build disabled. Uncomment after pulling base model."
echo ""
# ---------------------------------------------------------------------------
# Step 4 — Python dependencies for lib/
# ---------------------------------------------------------------------------
# TODO (Step 2): Install Python deps once requirements.txt is written.
# DO NOT run pip install without explicit approval from Matt.
#
# Example (do NOT uncomment without approval):
# pip install -r "${SCRIPT_DIR}/requirements.txt"
echo "[4/7] TODO — Python deps not yet defined. See lib/ stubs. Do not pip install without approval."
echo ""
# ---------------------------------------------------------------------------
# Step 5 — Generate initial vocab (entity lexicon)
# ---------------------------------------------------------------------------
# TODO (Step 3): Calls lib/vocab_gen.py to query proxmox/docker/headscale
# and write engine/vocab.json.
#
# Example:
# python3 "${SCRIPT_DIR}/lib/vocab_gen.py"
echo "[5/7] TODO — vocab_gen.py not yet implemented (Step 3)."
echo ""
# ---------------------------------------------------------------------------
# Step 6 — Install git pre-commit hook
# ---------------------------------------------------------------------------
# TODO (Step 4): Symlink or copy a pre-commit hook that runs lint.py
# against staged vault docs before commit.
#
# Example:
# HOOK="${SCRIPT_DIR}/../../.git/hooks/pre-commit"
# ln -sf "${SCRIPT_DIR}/hooks/pre-commit" "${HOOK}"
echo "[6/7] TODO — git pre-commit hook not yet implemented (Step 4)."
echo ""
# ---------------------------------------------------------------------------
# Step 7 — Install cron job
# ---------------------------------------------------------------------------
# TODO (Step 6): Install cron from schedule.cron in config.yaml.
# Cron entry should call sweep.sh with appropriate guards.
#
# config.yaml schedule.cron: "0 9 * * *"
# Example crontab line:
# 0 9 * * * /home/zvx/projects/.ref/engine/sweep.sh >> /home/zvx/projects/.ref/engine/sweep.log 2>&1
echo "[7/7] TODO — cron job not yet installed (Step 6)."
echo ""
echo "==> bootstrap.sh complete (partial — disabled steps noted above)."