import gradio as gr _enabled_sources: list = [] def get_enabled_sources() -> list: return _enabled_sources SOURCE_GROUPS = { "Alto Impacto (Global)": { "SEMANTIC": {"name": "Semantic Scholar", "free": True, "key": "SEMANTIC_SCHOLAR_API_KEY"}, "SCOPUS": {"name": "Scopus", "free": False, "key": "SCOPUS_API_KEY"}, "OPENALEX": {"name": "OpenAlex", "free": True, "key": None}, "ARXIV": {"name": "arXiv", "free": True, "key": None}, "CROSSREF": {"name": "Crossref", "free": True, "key": None}, }, "Latinoamérica": { "REDALYC": {"name": "Redalyc", "free": True, "key": "REDALYC_TOKEN"}, "SCIELO": {"name": "SciELO", "free": True, "key": None}, "LA_REFERENCIA": {"name": "La Referencia", "free": True, "key": None}, }, "Ciencia Abierta": { "CORE": {"name": "CORE", "free": True, "key": "CORE_API_KEY"}, "OPENAIRE": {"name": "OpenAIRE", "free": True, "key": None}, "DOAJ": {"name": "DOAJ", "free": True, "key": None}, "ZENODO": {"name": "Zenodo", "free": True, "key": None}, "PUBMED": {"name": "PubMed", "free": True, "key": None}, }, "Repositorios Nacionales": { "CONACYT": {"name": "CONAHCyT 🇲🇽", "free": True, "key": None}, "UNAM": {"name": "UNAM 🇲🇽", "free": True, "key": None}, "ANID": {"name": "ANID 🇨🇱", "free": True, "key": None}, "OASISBR": {"name": "Oasisbr 🇧🇷", "free": True, "key": None}, "SNRD": {"name": "SNRD 🇦🇷", "free": True, "key": None}, "MINCIENCIAS": {"name": "MinCiencias 🇨🇴", "free": True, "key": None}, "BDTD": {"name": "BDTD 🇧🇷", "free": True, "key": None}, "RRAAE": {"name": "RRAAE 🇪🇨", "free": True, "key": None}, "RECOLECTA": {"name": "Recolecta 🇪🇸", "free": True, "key": None}, "KIMUK": {"name": "KIMUK 🇨🇷", "free": True, "key": None}, "TIMBO": {"name": "Timbó 🇺🇾", "free": True, "key": None}, "REDICCES": {"name": "REDICCES 🇸🇻", "free": True, "key": None}, }, } def _get_enabled_sources(source_toggles): return [sid for sid, toggle in source_toggles.items() if toggle.value] def create_sources_config_tab(): with gr.Tab("📡 Fuentes Config", id="sources_config"): gr.Markdown("## 📡 Configuración de Fuentes Académicas") gr.Markdown("Selecciona qué bases de datos usar en la búsqueda") source_toggles = {} all_toggle_components = [] for group_name, sources in SOURCE_GROUPS.items(): with gr.Accordion(f"📂 {group_name}", open=True): with gr.Row(): for source_id, source_info in sources.items(): key_status = "🔑" if source_info["key"] else "🆓" toggle = gr.Checkbox( value=True, label=f"{key_status} {source_info['name']}", interactive=True ) source_toggles[source_id] = toggle all_toggle_components.append(toggle) with gr.Accordion("🇵🇪 Panel Perú", open=False): gr.Markdown("Filtros especializados para repositorios peruanos") alicia_general = gr.Checkbox(value=True, label="ALICIA General") alicia_universities = gr.Checkbox(value=True, label="ALICIA Universidades") alicia_institutes = gr.Checkbox(value=True, label="ALICIA Institutos") renati_general = gr.Checkbox(value=True, label="RENATI General") renati_public = gr.Checkbox(value=True, label="RENATI Públicas") renati_private = gr.Checkbox(value=True, label="RENATI Privadas") university_filter = gr.Textbox(label="Filtro por Universidad", placeholder="Ej: UNMSM") with gr.Accordion("📅 Filtros de Año", open=False): with gr.Row(): year_start = gr.Textbox(label="Año Inicio", placeholder="2020") year_end = gr.Textbox(label="Año Fin", placeholder="2025") enabled_sources_state = gr.State(value=list(source_toggles.keys())) def _update_enabled(*args): global _enabled_sources _enabled_sources = [sid for sid, val in zip(source_toggles.keys(), args) if val] return _enabled_sources for toggle in all_toggle_components: toggle.change( fn=_update_enabled, inputs=all_toggle_components, outputs=[enabled_sources_state], ) _enabled_sources = list(source_toggles.keys()) return source_toggles, year_start, year_end, enabled_sources_state