| import gradio as gr |
| import json |
| import os |
|
|
| AGENT_PROFILES = { |
| "general": {"title": "Investigador General", "instruction": "Realiza una s铆ntesis integral y EXTENSA cubriendo todos los aspectos del tema. Cada p谩rrafo debe ser denso en informaci贸n t茅cnica. Analiza la convergencia y divergencia de los estudios citados con profundidad doctoral.\n\nCITAS OBLIGATORIAS: Toda afirmaci贸n debe citar su fuente usando el formato [[n]] {{BIB:ID}}.\n\nADAPTABILIDAD: Si la consulta es una tesis, sigue una estructura acad茅mica estricta."}, |
| "auto": {"title": "Agente Aut贸nomo (Red Din谩mica)", "instruction": "ERES UN AGENTE AUT脫NOMO DE ALTA CAPACIDAD.\nTU OBJETIVO PRINCIPAL: Organizar y sintetizar la TOTALIDAD de los documentos encontrados en una estructura l贸gica y coherente creada por ti mismo.\n\nINSTRUCCIONES CR脥TICAS:\n1. NO USES ESTRUCTURAS PREFABRICADAS. Crea tus propias secciones.\n2. COBERTURA TOTAL: Debes incluir y citar CADA UNO de los documentos relevantes.\n3. ORGANIZACI脫N INTELIGENTE: Agrupa los estudios por similitud tem谩tica.\n4. REFERENCIAS: Cada afirmaci贸n con [[n]] {{BIB:ID}}.\n5. FORMATO PRO: Reporte denso, acad茅mico y detallado."}, |
| "antecedentes": {"title": "Arquitecto de Antecedentes de Tesis", "instruction": "GENERA LA SECCI脫N 'ANTECEDENTES' PARA UNA TESIS DE GRADO.\n\nESTRUCTURA OBLIGATORIA:\n\\subsection{Antecedentes Internacionales}\nM脥NIMO 3 estudios de pa铆ses distintos al detectado.\n\\subsection{Antecedentes Nacionales}\nM脥NIMO 3 estudios del PA脥S detectado.\n\\subsection{Antecedentes Locales}\nM脥NIMO 3 estudios de la REGI脫N o CIUDAD detectada.\n\nFORMATO: '[Apellido] ([A帽o]), en su tesis titulada '[T铆tulo]' de la [Universidad], tuvo como objetivo [objetivo]. Los resultados indicaron [hallazgos]. Concluy贸 que [conclusi贸n]. [[n]] {{BIB:ID}}'"}, |
| "teorico": {"title": "Te贸rico Cient铆fico", "instruction": "Enf贸cate en bases epistemol贸gicas, definiciones fundamentales y marcos conceptuales de forma MUY DETALLADA.\nExplica los mecanismos subyacentes con precisi贸n doctrinal absoluta.\n\nCITAS OBLIGATORIAS: Toda afirmaci贸n debe citar su fuente usando [[n]] {{BIB:ID}}."}, |
| "metodologo": {"title": "Arquitecto de Metodolog铆a de Tesis", "instruction": "Genera la secci贸n de METODOLOG脥A completa para una tesis de grado.\n\nESTRUCTURA OBLIGATORIA:\n\\subsection{Dise帽o de la Investigaci贸n}\n\\subsection{Poblaci贸n y Muestra}\n\\subsection{Variables de Investigaci贸n}\n\\subsection{T茅cnicas e Instrumentos}\n\nREGLAS: Citar metod贸logos con [[n]] {{BIB:ID}}. Extensi贸n m铆nima: 2-3 p谩rrafos por subsecci贸n."}, |
| "hipotesis": {"title": "Estratega de Hip贸tesis Cient铆ficas", "instruction": "Genera la secci贸n de HIP脫TESIS.\n\nESTRUCTURA:\n\\subsection{Hip贸tesis General}\n\\subsection{Hip贸tesis Espec铆ficas}\n\nREGLAS: Hip贸tesis contrastables. Basadas en evidencia. Citas [[n]] {{BIB:ID}}."}, |
| "objetivos": {"title": "Arquitecto de Objetivos de Investigaci贸n", "instruction": "Genera los OBJETIVOS.\n\nESTRUCTURA:\n\\subsection{Objetivo General}\n\\subsection{Objetivos Espec铆ficos}\n\nREGLAS: Verbos en infinitivo. Coherencia con planteamiento."}, |
| "resultados": {"title": "Analista de Resultados", "instruction": "Sintetiza hallazgos cuantitativos y cualitativos de forma EXHAUSTIVA.\n\nENFOQUE: Discusi贸n, qu茅 dicen los datos, qu茅 falta por investigar.\nCITAS: Toda cifra con [[n]] {{BIB:ID}}."}, |
| "problema": {"title": "Arquitecto de Planteamiento del Problema", "instruction": "Genera PLANTEAMIENTO DEL PROBLEMA.\n\nESTRUCTURA:\n\\subsection{Realidad Problem谩tica}\n\\subsection{Formulaci贸n del Problema}\n\nREGLAS: Contexto global/nacional/local. Citas [[n]] {{BIB:ID}}. M铆nimo 4-5 p谩rrafos."}, |
| "justificacion": {"title": "Arquitecto de Justificaci贸n e Importancia", "instruction": "Genera JUSTIFICACI脫N E IMPORTANCIA.\n\nESTRUCTURA:\n\\subsection{Importancia}\n\\subsection{Justificaci贸n (Te贸rica, Pr谩ctica, Social, Metodol贸gica)}\n\nREGLAS: M铆nimo 2 p谩rrafos por tipo. Citas [[n]] {{BIB:ID}}."}, |
| "marco_teorico": {"title": "Arquitecto de Marco Te贸rico para Tesis", "instruction": "Genera MARCO TE脫RICO completo.\n\nESTRUCTURA:\n1. ANTECEDENTES\n2. BASES TE脫RICAS DE LAS VARIABLES\n3. AN脕LISIS DE DIMENSIONES\n4. DEFINICI脫N DE T脡RMINOS B脕SICOS\n\nREGLAS: \\subsection{} y \\subsubsection{}. Citas [[n]] {{BIB:ID}}. M铆nimo 3-4 p谩rrafos por subsecci贸n."}, |
| "comunicacion": {"title": "Estratega de Comunicaci贸n Digital", "instruction": "Especialista en an谩lisis de audiencias, engagement y marketing.\n\nENFOQUE: Conectar teor铆a de comunicaci贸n con m茅tricas.\nCITAS: [[n]] {{BIB:ID}}."}, |
| } |
|
|
| PROMPT_KEYS_FOR_UI = [ |
| {"key": "researchQueryOptimizerPrompt", "label": "Query Optimizer", "description": "Genera queries booleanos y sem谩nticos para b煤squeda acad茅mica"}, |
| {"key": "researchPlanningPrompt", "label": "Planning", "description": "Genera plan de investigaci贸n estructurado en JSON"}, |
| {"key": "researchMasterPrompt", "label": "Master Prompt", "description": "Prompt maestro de s铆ntesis doctoral"}, |
| {"key": "researchWritingPrompt", "label": "Writing", "description": "Redacci贸n de secciones individuales"}, |
| {"key": "researchGradePrompt", "label": "GRADE", "description": "Clasificaci贸n de evidencia seg煤n protocolo GRADE"}, |
| {"key": "researchAuditPrompt", "label": "Audit", "description": "Auditor铆a t茅cnica de calidad acad茅mica"}, |
| {"key": "researchAraPrompt", "label": "ARA+ Refinement", "description": "Refinamiento acad茅mico avanzado"}, |
| {"key": "researchStandardValidationPrompt", "label": "Validaci贸n", "description": "Validaci贸n de citas bibliogr谩ficas"}, |
| {"key": "researchGapDetectionPrompt", "label": "Gap Detection", "description": "Detecci贸n de vac铆os de informaci贸n"}, |
| {"key": "researchRescuePrompt", "label": "Query Rescate", "description": "Queries de rescate para vac铆os"}, |
| {"key": "researchSearchContextPrompt", "label": "Contexto B煤squeda", "description": "Contexto para evitar redundancia"}, |
| {"key": "researchHierarchicalDistillationPrompt", "label": "Destilaci贸n Jer谩rquica", "description": "Destilaci贸n de hallazgos (Map-Reduce)"}, |
| {"key": "researchHierarchicalSynthesisPrompt", "label": "S铆ntesis Jer谩rquica", "description": "S铆ntesis de evidencia destilada"}, |
| {"key": "researchTranslationPrompt", "label": "Traducci贸n", "description": "Traducci贸n acad茅mica estricta"}, |
| {"key": "researchFinalReportPrompt", "label": "Reporte Final", "description": "Formato de reporte final"}, |
| ] |
|
|
| def create_agents_tab(): |
| with gr.Tab("馃懃 Agentes", id="agents"): |
| gr.Markdown("## 馃懃 Configuraci贸n de Agentes") |
| gr.Markdown("Personaliza el rol, perfil doctoral y preset del agente investigador") |
|
|
| with gr.Row(): |
| with gr.Column(scale=2): |
| agent_role = gr.Dropdown( |
| choices=list(AGENT_PROFILES.keys()), |
| value="general", label="Perfil del Agente" |
| ) |
| agent_title = gr.Textbox( |
| value="Investigador General", label="T铆tulo del Agente", interactive=False |
| ) |
| agent_instruction = gr.Textbox( |
| value=AGENT_PROFILES["general"]["instruction"], |
| label="Instrucci贸n del Agente", lines=15 |
| ) |
| with gr.Row(): |
| restore_btn = gr.Button("馃攧 Restaurar Perfil", variant="secondary") |
| structure_mode = gr.Radio( |
| choices=["LIBRE", "ESTRICTO"], value="LIBRE", |
| label="Modo Estructura" |
| ) |
|
|
| def update_profile(role): |
| profile = AGENT_PROFILES.get(role, AGENT_PROFILES["general"]) |
| return profile["title"], profile["instruction"] |
|
|
| agent_role.change(fn=update_profile, inputs=[agent_role], outputs=[agent_title, agent_instruction]) |
| restore_btn.click(fn=update_profile, inputs=[agent_role], outputs=[agent_title, agent_instruction]) |
|
|
| with gr.Column(scale=3): |
| gr.Markdown("### Modo Estructura") |
| gr.Markdown(""" |
| **LIBRE:** La IA crea libremente las secciones seg煤n el contenido y variables detectadas. |
| |
| **ESTRICTO:** Solo se pueden usar las secciones de una plantilla predefinida. El contenido se adapta pero la estructura es fija. |
| """) |
|
|
| gr.Markdown("### Perfiles Disponibles") |
| for key, profile in AGENT_PROFILES.items(): |
| gr.Markdown(f"- **{key}**: {profile['title']}") |
|
|
| return agent_role, agent_instruction, structure_mode |
|
|