#!/usr/bin/env python3 """ rag-demo.py — Conecta tu grafo de conocimiento en SQLite con un LLM. Extrae nodos y sus relaciones del grafo y los emite como JSONL, listo para encadenar con `llm` o con cualquier cliente que lea por stdin. Uso: ./rag-demo.py | llm "resume las herramientas del proyecto" ./rag-demo.py --tipo tool --limite 50 """ import argparse import json from sqlite_utils import Database DB = "demo.db" def extraer(db, tipo, limite): """Devuelve las filas del grafo como un iterador de diccionarios.""" sql = """ select n.key, n.label, n.type, e.kind as relacion from nodes n left join edges e on n.key = e.source where (:tipo is null or n.type = :tipo) order by n.type, n.label limit :limite """ return db.query(sql, {"tipo": tipo, "limite": limite}) def main(): parser = argparse.ArgumentParser(description="Contexto del grafo para un LLM") parser.add_argument("--tipo", help="Filtra por tipo de nodo (tool, concept, file...)") parser.add_argument("--limite", type=int, default=30, help="Número de nodos a extraer") args = parser.parse_args() db = Database(DB) for fila in extraer(db, args.tipo, args.limite): print(json.dumps(fila, ensure_ascii=False)) if __name__ == "__main__": main()