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()