Judge / backend /scripts /validate_query.py
GonzaViss's picture
feat: add validate_query script for retrieval validation
e61d78c
Raw
History Blame Contribute Delete
1.61 kB
"""
Valida el pipeline de retrieval: embebe una pregunta y consulta pgvector.
Uso: python scripts/validate_query.py "tu pregunta aquí"
"""
import sys
import os
from dotenv import load_dotenv
import psycopg2
from pgvector.psycopg2 import register_vector
from sentence_transformers import SentenceTransformer
load_dotenv()
EMBED_MODEL = "BAAI/bge-m3"
DATABASE_URL = os.getenv("DATABASE_URL")
TOP_K = 5
def main():
question = " ".join(sys.argv[1:]) if len(sys.argv) > 1 else "How many copies of the same card can I include in my deck?"
print(f"\nPregunta: {question}\n")
print("Cargando modelo...")
model = SentenceTransformer(EMBED_MODEL)
embedding = model.encode(question, normalize_embeddings=True).tolist()
print("Conectando a Supabase...")
conn = psycopg2.connect(DATABASE_URL)
register_vector(conn)
with conn.cursor() as cur:
cur.execute(
"""
SELECT section, source_type, source_document,
LEFT(content, 300) AS preview,
1 - (embedding <=> %s::vector) AS similarity
FROM corpus_chunks
ORDER BY embedding <=> %s::vector
LIMIT %s
""",
(embedding, embedding, TOP_K),
)
rows = cur.fetchall()
conn.close()
print(f"\nTop {TOP_K} resultados:\n" + "=" * 60)
for i, (section, source_type, source_doc, preview, sim) in enumerate(rows, 1):
print(f"\n[{i}] {section} ({source_type}/{source_doc}) — similitud: {sim:.4f}")
print(f" {preview.strip()[:200]}...")
if __name__ == "__main__":
main()