cerebro: el modelo conoce sus areas del indice real, no de una lista fija (honesto en cualquier clon)

This commit is contained in:
sito 2026-08-16 17:49:11 +02:00
parent 29860fac86
commit 12987539a4
2 changed files with 55 additions and 15 deletions

View file

@ -155,5 +155,39 @@ def contexto(pregunta: str, cuantos: int = 5, minimo: float = 0.35) -> str:
return "\n".join(lineas)
def resumen(tope_temas: int = 10) -> str:
"""Un resumen de QUE hay indexado, para que el modelo sepa de que sabe.
Se deriva del indice de VERDAD, no de una lista fija en el prompt. Asi es
honesto en cualquier maquina: en la del usuario dice sus areas reales; en un
clon sin apuntes propios dira lo que haya (comandos de Linux) o nada. Lo usa
el cerebro para el prompt de sistema; evita que presuma de un conocimiento
que en esa maquina no tiene."""
if not _carga() or not _entradas:
return ""
from collections import Counter
perfiles, temas = Counter(), Counter()
n_comandos = 0
for e in _entradas:
t = e.get("tipo")
if t == "comando":
n_comandos += 1
elif t in ("apunte", "metodologia", "ficha", "pregunta") and e.get("perfil"):
perfiles[e["perfil"]] += 1
if e.get("tema"):
temas[e["tema"]] += 1
partes = []
if perfiles:
partes.append("apuntes de " + ", ".join(p for p, _ in perfiles.most_common(6)))
if temas:
partes.append("metodologia en " + ", ".join(t for t, _ in temas.most_common(tope_temas)))
if n_comandos:
partes.append(f"{n_comandos} comandos de Linux")
if not partes:
return ""
return ("En los apuntes que tienes indexados (buscalos con buscar_en_apuntes) "
"hay: " + "; ".join(partes) + ".")
def disponible() -> bool:
return os.path.exists(INDICE)