Files
gart/rag/embed.py
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

38 lines
1.3 KiB
Python

"""Embeddings compartilhados entre indexador e busca do RAG do G-ART.
admin/update_rag.py já indexa (chunking por janela de linhas, incremental,
rodado por admin/run.command). Este módulo só isola a chamada ao Ollama para
que rag/search.py use exatamente o mesmo modelo/prefixo na consulta.
Prefixos do embedding
----------------------
O nomic-embed-text espera `search_document: ` no que é indexado e
`search_query: ` no que é consultado — sem isso a qualidade da busca cai.
admin/update_rag.py já indexa com `search_document: ` (ver `_embed` lá).
Trocar esse regime invalida os vetores antigos e exige reindexar tudo.
"""
import os
import requests
OLLAMA_URL = os.environ.get("OLLAMA_URL", "http://127.0.0.1:11434")
EMBED_MODEL = os.environ.get("RAG_EMBED_MODEL", "nomic-embed-text")
EMBED_DIM = int(os.environ.get("RAG_EMBED_DIM", "768"))
DOC_PREFIX = "search_document: "
QUERY_PREFIX = "search_query: "
def _embed(text: str, prefix: str = DOC_PREFIX):
response = requests.post(
f"{OLLAMA_URL.rstrip('/')}/api/embeddings",
json={"model": EMBED_MODEL, "prompt": f"{prefix}{text}"},
timeout=60,
)
response.raise_for_status()
vector = response.json()["embedding"]
if len(vector) != EMBED_DIM:
raise ValueError(f"embedding com {len(vector)} dimensões; esperado {EMBED_DIM}")
return vector