Files
gart/admin/update_rag.command
João HenriqueandClaude Sonnet 5 e9a17c1b62 feat(rag): provisiona busca RAG do G-ART e corrige indexação que abortava em chunk grande
Cria rag/ (schema, busca híbrida densa+lexical com RRF em search.py/
search_gart.sh, SETUP.md) — o projeto já tinha admin/update_rag.py para
indexar, mas nenhuma forma de consultar o índice. Corrige admin/update_rag.py:
um chunk denso em tokens (code/fcpxml/font_metrics.py) estourava o contexto
do modelo de embedding e derrubava a transação inteira; agora só aquele
chunk é pulado. Banco rag_gart provisionado no rag-hub-db compartilhado e
primeira indexação completa rodada (304 arquivos, 1702 chunks).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 09:38:46 -04:00

69 lines
2.0 KiB
Bash
Executable File

#!/bin/zsh
# Atualiza incrementalmente a RAG do G-ART usando o banco compartilhado.
#
# Credenciais: defina RAG_DB_PASSWORD no ambiente ou crie
# admin/gart-rag.env (ignorado pelo git). O arquivo pode conter também
# RAG_DB_USER, RAG_DB_PORT, OLLAMA_URL e RAG_EMBED_MODEL.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
ENV_FILE="$ROOT/admin/gart-rag.env"
if [[ -f "$ENV_FILE" ]]; then
set -a
source "$ENV_FILE"
set +a
fi
PYTHON="${RAG_PYTHON:-}"
if [[ -z "$PYTHON" ]]; then
for candidate in "$ROOT/admin/.venv/bin/python3" "$ROOT/rag/.venv/bin/python3"; do
if [[ -x "$candidate" ]]; then PYTHON="$candidate"; break; fi
done
fi
PYTHON="${PYTHON:-$(command -v python3)}"
if ! "$PYTHON" -c 'import psycopg2, requests' >/dev/null 2>&1; then
echo "ERRO: o Python da RAG precisa dos pacotes psycopg2 e requests." >&2
echo "Instale-os no ambiente indicado por RAG_PYTHON e tente novamente." >&2
exit 1
fi
if [[ -z "${RAG_DB_PASSWORD:-}" ]]; then
echo "ERRO: defina RAG_DB_PASSWORD ou configure $ENV_FILE" >&2
exit 1
fi
HOST="${RAG_VPS_HOST:-179.197.228.240}"
LOCAL_PORT="${RAG_DB_PORT:-55435}"
REMOTE_PORT="${RAG_REMOTE_PORT:-55435}"
TUNNEL_PID=""
cleanup() {
if [[ -n "$TUNNEL_PID" ]] && kill -0 "$TUNNEL_PID" 2>/dev/null; then
kill "$TUNNEL_PID" 2>/dev/null || true
wait "$TUNNEL_PID" 2>/dev/null || true
fi
}
trap cleanup EXIT
if ! nc -z 127.0.0.1 "$LOCAL_PORT" 2>/dev/null; then
echo "==> Abrindo túnel RAG (127.0.0.1:$LOCAL_PORT)..."
ssh -N -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 \
-o ServerAliveCountMax=3 -L "127.0.0.1:$LOCAL_PORT:127.0.0.1:$REMOTE_PORT" \
"${RAG_VPS_USER:-root}@$HOST" &
TUNNEL_PID=$!
for _ in {1..20}; do
nc -z 127.0.0.1 "$LOCAL_PORT" 2>/dev/null && break
kill -0 "$TUNNEL_PID" 2>/dev/null || break
sleep 0.25
done
fi
if ! nc -z 127.0.0.1 "$LOCAL_PORT" 2>/dev/null; then
echo "ERRO: não foi possível abrir o túnel RAG." >&2
exit 1
fi
echo "==> Atualizando RAG do G-ART (incremental)..."
cd "$ROOT"
exec "$PYTHON" "$ROOT/admin/update_rag.py"