scripts/butler-observability-provision.sh
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env bash
# Phase 1 observability provisioning — LangFuse + embedding production defaults.
# Idempotent: only sets vars that are missing or still commented defaults.
#
# Usage:
# bash scripts/butler-observability-provision.sh
# bash scripts/butler-observability-provision.sh --check-only
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
BUTLER_HOME="${BUTLER_HOME:-$HOME/.butler}"
ENV_FILE="${ENV_FILE:-$ROOT/.env}"
CHECK_ONLY=0
while [[ $# -gt 0 ]]; do
case "$1" in
--check-only) CHECK_ONLY=1 ;;
-h|--help)
echo "Usage: $0 [--check-only]"
exit 0
;;
*) echo "Unknown option: $1" >&2; exit 1 ;;
esac
shift
done
_set_env_var() {
local key="$1" value="$2"
if [[ ! -f "$ENV_FILE" ]]; then
echo " SKIP $key (no $ENV_FILE)"
return
fi
if grep -qE "^${key}=" "$ENV_FILE" 2>/dev/null; then
local current
current=$(grep -E "^${key}=" "$ENV_FILE" | tail -1 | cut -d= -f2-)
if [[ -n "$current" && "$current" != "0" ]]; then
echo " KEEP $key=$current"
return
fi
fi
if [[ "$CHECK_ONLY" -eq 1 ]]; then
echo " NEED $key=$value"
return
fi
if grep -qE "^#? *${key}=" "$ENV_FILE" 2>/dev/null; then
sed -i -E "s|^#? *${key}=.*|${key}=${value}|" "$ENV_FILE"
else
echo "${key}=${value}" >> "$ENV_FILE"
fi
echo " SET $key=$value"
}
_ensure_langfuse_project() {
local proj_dir="$BUTLER_HOME/projects/butler-v4"
local cfg="$proj_dir/langfuse.json"
if [[ -f "$cfg" ]]; then
echo " KEEP $cfg"
return
fi
if [[ "$CHECK_ONLY" -eq 1 ]]; then
echo " NEED $cfg"
return
fi
mkdir -p "$proj_dir"
cat > "$cfg" <<'JSON'
{
"project_name": "butler-v4",
"project_id": "butler-v4",
"langfuse_host": "http://localhost:3000",
"langfuse_public_key": "pk-butler-dev",
"langfuse_secret_key": "sk-butler-dev"
}
JSON
echo " SET $cfg"
}
echo "=== Butler Observability Provision ==="
echo " .env: $ENV_FILE"
echo ""
echo "[LangFuse]"
_set_env_var "BUTLER_LANGFUSE_ENABLED" "1"
_set_env_var "LANGFUSE_HOST" "http://localhost:3000"
_set_env_var "LANGFUSE_PUBLIC_KEY" "pk-butler-dev"
_set_env_var "LANGFUSE_SECRET_KEY" "sk-butler-dev"
_ensure_langfuse_project
echo ""
echo "[Embedding]"
_set_env_var "BUTLER_SEMANTIC_MEMORY" "1"
_set_env_var "BUTLER_EMBEDDING_PROVIDER" "fastembed"
_set_env_var "BUTLER_EMBEDDING_MODEL" "BAAI/bge-small-en-v1.5"
echo ""
if [[ "$CHECK_ONLY" -eq 0 ]]; then
echo "Provision complete. Restart gateway after editing API keys if needed."
fi