File size: 2,719 Bytes
2276fab
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a16dca8
2276fab
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a16dca8
2276fab
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import gradio as gr
import os
from dotenv import load_dotenv
import google.generativeai as genai

# Cargamos variables de entorno
load_dotenv(os.path.join(os.path.dirname(__file__), './.env'))

genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
model = genai.GenerativeModel('gemini-2.5-flash')

def procesar_consulta(consulta, estructura_temas, historial):
    # Validaciones b谩sicas
    if not consulta or not estructura_temas:
        gr.Warning("鈿狅笍 Por favor, llena ambos campos antes de continuar.")
        return consulta, estructura_temas, historial

    # Aseguramos que el historial sea una lista (por si llega None)
    if historial is None:
        historial = []

    # 1. Primer llamado: Descripciones de la estructura
    prompt_desc = f"Eres experta en protecci贸n de datos y an谩lisis de resoluciones de la SIC. Tu objetivo es ayudar a entender radicados legales de privacidad. Necesito que Describas brevemente cada nivel de esta jerarqu铆a: {estructura_temas} de acuerdo a tu expertise."
    try:
        descripciones = model.generate_content(prompt_desc).text
    except Exception as e:
        descripciones = f"Error en descripciones: {str(e)}"

    # 2. Segundo llamado: Clasificaci贸n
    prompt_class = f"""
    experta en protecci贸n de datos y an谩lisis de resoluciones de la SIC. Tu objetivo es ayudar a entender radicados legales de privacidad.
    Basado en: {descripciones}
    Clasifica la consulta: "{consulta}"
    Explica el porqu茅 de la clasificaci贸n.
    """
    try:
        clasificacion = model.generate_content(prompt_class).text
    except Exception as e:
        clasificacion = f"Error en clasificaci贸n: {str(e)}"

    respuesta_completa = f"### 馃摎 Estructura\n{descripciones}\n\n---\n### 馃攳 Resultado\n{clasificacion}"

    #historial
    historial.append({"role": "user", "content": consulta})
    historial.append({"role": "assistant", "content": respuesta_completa})
    
    # Retornamos los valores para limpiar inputs y actualizar el chatbot
    return "", "", historial

with gr.Blocks() as demo:
    gr.Markdown("# 馃 Clasificador Gemini")
    
    chatbot = gr.Chatbot(label="Chat de Clasificaci贸n")
    
    with gr.Row():
        txt_consulta = gr.Textbox(label="Tu consulta", placeholder="Ej: Duda acerca de privacidad de datos")
        txt_temas = gr.Textbox(label="Temas > Subtemas", placeholder="1. Protecci贸n de Datos > 1.1 internet > 1.1.2 informaci贸n personal")
    
    btn = gr.Button("Analizar", variant="primary")

    # lista de dicts
    btn.click(
        procesar_consulta,
        inputs=[txt_consulta, txt_temas, chatbot],
        outputs=[txt_consulta, txt_temas, chatbot]
    )

if __name__ == "__main__":
    demo.launch()