import gradio as gr def create_mining_tab(): with gr.Tab("⛏️ Mining", id="mining"): gr.Markdown("## ⛏️ Data Mining Engine (L-DME)") gr.Markdown("Configuración completa del motor de minería de datos y síntesis avanzada") with gr.Row(): with gr.Column(): gr.Markdown("### 🔧 Motor de Datos") enable_dme = gr.Checkbox(value=True, label="Auto-Reparación JSON (DME)") auto_recover = gr.Checkbox(value=False, label="Auto-Recuperar Metadatos al finalizar") memory_json = gr.Checkbox(value=True, label="Memory JSON (persistencia)") gr.Markdown("### 🔍 Fases del Pipeline") phase_search = gr.Checkbox(value=True, label="Fase 1: Búsqueda") phase_synthesis = gr.Checkbox(value=True, label="Fase 2: Síntesis") gr.Markdown("### 🔄 Iteraciones") iterations_enabled = gr.Checkbox(value=True, label="Habilitar Iteraciones") iterations_count = gr.Slider(minimum=1, maximum=30, value=1, step=1, label="Número de Iteraciones") gr.Markdown("### ⏱️ Delay entre Iteraciones") delay_enabled = gr.Checkbox(value=False, label="Habilitar Delay") with gr.Row(): delay_minutes = gr.Slider(minimum=0, maximum=1, value=0, step=1, label="Minutos") delay_seconds = gr.Slider(minimum=0, maximum=59, value=0, step=1, label="Segundos") with gr.Column(): gr.Markdown("### 📋 Estrategia de Síntesis") synthesis_strategy = gr.Radio( choices=["lineal", "jerárquica", "auto"], value="auto", label="Estrategia" ) auto_strategy = gr.Checkbox(value=True, label="Auto-seleccionar estrategia") hierarchical_threshold = gr.Slider(minimum=10, maximum=100, value=50, step=5, label="Umbral Jerárquico (docs)") gr.Markdown("### ⚡ Opciones Avanzadas") parallel_synthesis = gr.Checkbox(value=True, label="Síntesis Paralela") use_map_reduce = gr.Checkbox(value=True, label="Map-Reduce (Destilación)") infinite_output = gr.Checkbox(value=True, label="Output Infinito") max_continuation = gr.Slider(minimum=1, maximum=10, value=5, step=1, label="Max Continuaciones") strict_template = gr.Checkbox(value=False, label="Plantilla Estricta") gr.Markdown("### 📊 Límites de Documentos") max_search_docs = gr.Slider(minimum=10, maximum=200, value=100, step=10, label="Max Docs Búsqueda") max_synthesis_docs = gr.Slider(minimum=5, maximum=500, value=150, step=10, label="Max Docs Síntesis") chunk_size = gr.Slider(minimum=5, maximum=100, value=25, step=5, label="Chunk Size (Destilación)") gr.Markdown("### 🎯 Refinamiento") ara_plus = gr.Checkbox(value=True, label="ARA+ Refinamiento") grade_enabled = gr.Checkbox(value=True, label="GRADE Clasificación") grade_limit = gr.Slider(minimum=10, maximum=100, value=50, step=10, label="Max Docs GRADE") gr.Markdown("### 📝 Modo Abstract") abstract_mode = gr.Radio(choices=["COMPLETO", "LIMITADO"], value="COMPLETO", label="Modo Abstract") abstract_char_limit = gr.Slider(minimum=100, maximum=10000, value=5000, step=100, label="Límite de Caracteres (si LIMITADO)", visible=False) def toggle_abstract_limit(mode): return gr.update(visible=(mode == "LIMITADO")) abstract_mode.change(fn=toggle_abstract_limit, inputs=[abstract_mode], outputs=[abstract_char_limit]) with gr.Accordion("ℹ️ Guía de Configuración", open=False): gr.Markdown(""" ### Estrategias de Síntesis | Estrategia | Descripción | Cuándo usar | |-----------|-------------|-------------| | **Lineal** | Un solo call de IA con todo el contexto | < 50 docs, rápido | | **Jerárquica** | Divide en chunks, destila cada uno, luego sintetiza | > 50 docs, calidad | | **Auto** | Selecciona jerárquica si docs > umbral | Recomendado | ### DME (Data Mining Engine) - **Auto-Reparación**: Repara abstracts faltantes scraping HTML de repositorios - **Auto-Recuperar**: Ejecuta recuperación automática al finalizar el pipeline - **Memory JSON**: Persiste resultados en archivo JSON local ### Iteraciones - Cada iteración genera queries complementarias basadas en gaps detectados - Delay: Pausa entre iteraciones (útil para APIs con rate limits) ### Output Infinito - Si la respuesta se trunca, continúa automáticamente - Max continuaciones controla cuántas veces puede continuar """) return { "enable_dme": enable_dme, "auto_recover": auto_recover, "memory_json": memory_json, "phase_search": phase_search, "phase_synthesis": phase_synthesis, "iterations_enabled": iterations_enabled, "iterations_count": iterations_count, "delay_enabled": delay_enabled, "delay_minutes": delay_minutes, "delay_seconds": delay_seconds, "synthesis_strategy": synthesis_strategy, "auto_strategy": auto_strategy, "hierarchical_threshold": hierarchical_threshold, "parallel_synthesis": parallel_synthesis, "use_map_reduce": use_map_reduce, "infinite_output": infinite_output, "max_continuation": max_continuation, "strict_template": strict_template, "max_search_docs": max_search_docs, "max_synthesis_docs": max_synthesis_docs, "chunk_size": chunk_size, "ara_plus": ara_plus, "grade_enabled": grade_enabled, "grade_limit": grade_limit, "abstract_mode": abstract_mode, "abstract_char_limit": abstract_char_limit, }