#!/usr/bin/env python3
"""Prueba el RAG con los temas recien ingestados de Wikipedia."""
import os, sys, time
sys.path.insert(0, "/app/share/newelle")
sys.path.insert(0, os.path.expanduser(
    "~/.var/app/io.github.qwersyk.Newelle/config/pip"))
from gi.repository import Gio  # noqa: E402
from newelle.handlers.rag.llamaindex_handler import LlamaIndexHanlder  # noqa
from newelle.handlers.embeddings.model2vec import Model2VecHandler  # noqa

MODELOS = os.path.expanduser("~/.var/app/io.github.qwersyk.Newelle/config/models")
PREGUNTAS = [
    "que es la criptografia de curva eliptica",
    "quien es Richard Stallman y el software libre",
    "que es el efecto invernadero y el cambio climatico",
    "que fue la guerra civil espanola",
    "que es un ataque de denegacion de servicio",
]


def main():
    settings = Gio.Settings.new("io.github.qwersyk.Newelle")
    rag = LlamaIndexHanlder(settings, MODELOS)
    if not rag.is_installed():
        print("faltan dependencias del RAG"); return 1
    rag.embedding = Model2VecHandler(settings, MODELOS)

    class SinModelo:
        def load_model(self, *a, **k): return True
    rag.llm = SinModelo(); rag.secondary_llm = SinModelo()
    print("cargando el indice...", flush=True)
    rag.load_index()
    for pregunta in PREGUNTAS:
        print(f"\n### {pregunta}")
        ini = time.time()
        try:
            trozos = rag.get_context(pregunta, [])
        except Exception as e:
            print(f"  fallo: {e}"); continue
        ms = (time.time() - ini) * 1000
        if not trozos:
            print(f"  sin resultados ({ms:.0f} ms)"); continue
        print(f"  {len(trozos)} trozos en {ms:.0f} ms:")
        for t in trozos[:2]:
            resumen = " ".join(str(t).split())[:280]
            print(f"    · {resumen}")
    return 0


if __name__ == "__main__":
    sys.exit(main())
