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>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
d13f643ebc
commit
e9a17c1b62
Executable
+68
@@ -0,0 +1,68 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user