odelgi0810
ChatInterface
b09979b
Raw
History Blame Contribute Delete
7.43 kB
import os
import glob
import json
import tempfile
from langchain_core.documents import Document
def crear_prompt_resumen_parcial(tipo, red, serie, fecha, bloque):
"""
Genera el prompt según el tipo de resumen y el contenido del bloque.
"""
base_prompt = f"Red: {red}\nSerie: {serie}\nFecha: {fecha}\n"
instrucciones = {
"resumen_diario_temas": """
A partir del siguiente conjunto de posteos de usuarios en redes sociales, identifica los temas principales que se discuten. Redacta un resumen temático claro, bien estructurado y más extenso, explicando cada tema identificado con suficiente detalle.
Incluye ejemplos representativos de posteos o comentarios (pueden ser frases textuales o reformuladas) que ilustren claramente cada tema. Si no hay ejemplos relevantes para algún tema, evita inventarlos.
⚠️ Cíñete estrictamente al contenido proporcionado. No agregues información externa ni realices inferencias fuera de lo observado en los textos.
Organiza el resumen con subtítulos para cada tema, utilizando un lenguaje claro y evitando repeticiones innecesarias.
""",
"resumen_diario_preocupaciones": """
Analiza el siguiente conjunto de posteos de usuarios en redes sociales y redacta un resumen enfocado en las principales preocupaciones expresadas. Describe cada preocupación de manera clara, explicando a qué aspectos sociales, políticos, económicos o cotidianos se refiere.
Incluye ejemplos concretos de comentarios o frases representativas que evidencien las preocupaciones mencionadas, resaltando el tono o la gravedad expresada por los usuarios.
⚠️ No infieras preocupaciones que no estén reflejadas en los textos. Cíñete únicamente a lo que se menciona explícitamente.
Organiza el resumen con subtítulos por tipo de preocupación y evita repeticiones.
""",
"resumen_diario_atributos_emociones": """
A partir del conjunto de posteos proporcionado, identifica los principales atributos políticos discutidos (como honestidad, corrupción, eficacia, liderazgo) y las emociones más relevantes expresadas (como esperanza, enojo, miedo, entusiasmo).
Redacta un resumen detallado, diferenciando claramente los atributos políticos de las emociones. Para cada atributo o emoción, incluye ejemplos representativos de comentarios o frases textuales que muestren cómo los usuarios lo expresan.
⚠️ No agregues interpretaciones externas ni inventes atributos o emociones que no estén presentes en el texto.
Utiliza subtítulos diferenciados para “Atributos Políticos” y “Emociones Expresadas”, evitando redundancias y priorizando claridad.
""",
"resumen_diario_hashtags_menciones": """
Analiza el siguiente conjunto de posteos y elabora un resumen interpretativo sobre los hashtags y menciones a usuarios más destacados.
Lista los hashtags más mencionados junto con una breve interpretación de su uso, y menciona los usuarios o cuentas más citadas, aclarando en qué contexto se los menciona. Incluye ejemplos concretos de posteos que utilicen los hashtags o mencionen a los usuarios destacados.
⚠️ No inventes hashtags o menciones, ni infieras contextos que no estén reflejados en el texto. Ceñite estrictamente a lo observable.
Organiza el resumen con subtítulos diferenciados para “Hashtags Principales” y “Usuarios Mencionados”, y redactá de manera clara y estructurada.
"""
}
return base_prompt + instrucciones[tipo] + "\n\n" + bloque
def crear_prompt_resumen_global(tipo, res_parciales, red, serie, fecha):
"""
Usa los parciales para crear un resumen final consolidado, extenso y completo.
"""
base_prompt = f"Red: {red}\nSerie: {serie}\nFecha: {fecha}\n\n"
instrucciones = {
"resumen_diario_temas": (
"Tu tarea es unificar los siguientes resúmenes temáticos parciales en un resumen global EXTENSO, "
"mantené la información completa, sin eliminar detalles. Ampliá la redacción para que el resumen sea largo, "
"profundo y descriptivo, evitando repeticiones textuales pero conservando todos los conceptos y ejemplos relevantes. "
"Si es necesario, podés desarrollar ejemplos o contextualizar algunos temas para darle mayor riqueza al texto."
),
"resumen_diario_preocupaciones": (
"Unificá los siguientes resúmenes de preocupaciones en una síntesis extensa, descriptiva y comprensiva. "
"No reduzcas el nivel de detalle; mantené la totalidad de los puntos y expandí el contenido explicando mejor "
"las preocupaciones cuando sea posible. El objetivo es que el texto sea largo, claro y con profundidad."
),
"resumen_diario_atributos_emociones": (
"Sintetizá los siguientes resúmenes de atributos y emociones en un texto global extenso. No omitas ninguna mención "
"y procurá desarrollar los conceptos con más ejemplos y descripciones. El resumen debe ser largo y cubrir "
"todos los aspectos emocionales y atributos observados, aclarando matices cuando sea posible."
),
"resumen_diario_hashtags_menciones": (
"Unificá los siguientes resúmenes de hashtags y menciones en una interpretación global extensa, completa y bien explicada. "
"Ampliá las explicaciones de los hashtags y mencioná todos los ejemplos. Mantené la riqueza informativa y procurá "
"extender las descripciones para lograr un resumen largo y detallado."
)
}
texto_parciales = "\n\n---\n\n".join(res_parciales)
return base_prompt + instrucciones[tipo] + "\n\n" + texto_parciales
def cargar_documentos_resumenes(session_id):
base_dir = os.path.join(tempfile.gettempdir(), f"knowledge-base-resumenes-{session_id}")
if not os.path.exists(base_dir):
return None, (
"⚠️ No se encontró una base de conocimiento para esta sesión.\n\n"
"👉 Para comenzar, dirigite a la pestaña **Redes Sociales**, elige un cliente, red y series, "
"establece un rango de fechas y haz clic en **Consultar y Descargar Eventos**.\n"
"Luego, vuelve a esta pestaña y genera la base de conocimientos con el botón **Crear y Descargar Knowledge Base**. "
"Una vez hecho esto, podrás continuar haciendo clic en el botón **Inicializar el chat**."
)
paths = glob.glob(os.path.join(base_dir, "*", "*", "*.json"))
documentos = []
for path in paths:
try:
with open(path, "r", encoding="utf-8") as f:
data = json.load(f)
contenido = data.get("resumen", "")
except Exception as e:
contenido = f"⚠️ Error al leer resumen: {e}"
red = os.path.basename(os.path.dirname(os.path.dirname(path)))
serie = os.path.basename(os.path.dirname(path))
archivo = os.path.basename(path)
fecha = archivo.split("_")[0]
tipo = "_".join(archivo.replace(".json", "").split("_")[1:])
doc = Document(
page_content=contenido,
metadata={
"red": red.upper(),
"serie": serie.replace("_", " ").title(),
"fecha": fecha,
"tipo": tipo
}
)
documentos.append(doc)
# print(f"Primer documento ejemplo: {documentos[0]}...")
return documentos, None