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>
69 lines
2.0 KiB
Bash
Executable File
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"
|