Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -130,26 +130,82 @@ async def search_arxiv(
|
|
| 130 |
'error': str(e)
|
| 131 |
}
|
| 132 |
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
|
| 138 |
Args:
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
Returns:
|
| 143 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 144 |
"""
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 153 |
)
|
| 154 |
|
| 155 |
demo.launch(mcp_server=True)
|
|
|
|
| 130 |
'error': str(e)
|
| 131 |
}
|
| 132 |
|
| 133 |
+
async def list_retrievers(source: str = None) -> dict:
|
| 134 |
+
"""
|
| 135 |
+
Devuelve la lista de retrievers disponibles.
|
| 136 |
+
Si se especifica una source y existe, filtra por ella; si no existe, devuelve todas.
|
| 137 |
|
| 138 |
Args:
|
| 139 |
+
source (str, optional): Fuente para filtrar. Si no existe, se ignorará. Defaults to None.
|
| 140 |
+
|
|
|
|
| 141 |
Returns:
|
| 142 |
+
dict: {
|
| 143 |
+
"retrievers": Lista de retrievers (filtrados o completos),
|
| 144 |
+
"count": Número total,
|
| 145 |
+
"status": "success"|"error",
|
| 146 |
+
"source_requested": source, # Muestra lo que se solicitó
|
| 147 |
+
"source_used": "all"|source # Muestra lo que realmente se usó
|
| 148 |
+
}
|
| 149 |
"""
|
| 150 |
+
try:
|
| 151 |
+
available = []
|
| 152 |
+
source_exists = source in retrievers_metadata if source else False
|
| 153 |
+
|
| 154 |
+
for current_source, indexes in retrievers_metadata.items():
|
| 155 |
+
# Solo filtrar si el source existe, sino mostrar todo
|
| 156 |
+
if source_exists and current_source != source:
|
| 157 |
+
continue
|
| 158 |
+
|
| 159 |
+
for index_name, metadata in indexes.items():
|
| 160 |
+
available.append({
|
| 161 |
+
"name": index_name,
|
| 162 |
+
"source": current_source,
|
| 163 |
+
"title": metadata.get("title", ""),
|
| 164 |
+
"description": metadata.get("description", "")
|
| 165 |
+
})
|
| 166 |
+
|
| 167 |
+
return {
|
| 168 |
+
"retrievers": available,
|
| 169 |
+
"count": len(available),
|
| 170 |
+
"status": "success",
|
| 171 |
+
"source_requested": source,
|
| 172 |
+
"source_used": source if source_exists else "all"
|
| 173 |
+
}
|
| 174 |
+
except Exception as e:
|
| 175 |
+
return {
|
| 176 |
+
"retrievers": [],
|
| 177 |
+
"count": 0,
|
| 178 |
+
"status": "error",
|
| 179 |
+
"error": str(e),
|
| 180 |
+
"source_requested": source,
|
| 181 |
+
"source_used": "none"
|
| 182 |
+
}
|
| 183 |
+
|
| 184 |
+
# Configuración de la interfaz Gradio
|
| 185 |
+
demo = gr.TabbedInterface(
|
| 186 |
+
[
|
| 187 |
+
gr.Interface(
|
| 188 |
+
fn=search_arxiv,
|
| 189 |
+
inputs=[
|
| 190 |
+
gr.Textbox(label="Términos de búsqueda", placeholder="Ej: deep learning"),
|
| 191 |
+
gr.Slider(1, 10, value=5, step=1, label="Número máximo de resultados")
|
| 192 |
+
],
|
| 193 |
+
outputs=gr.JSON(label="Resultados de búsqueda"),
|
| 194 |
+
title="Búsqueda en ArXiv",
|
| 195 |
+
description="Busca artículos académicos en ArXiv por palabras clave."
|
| 196 |
+
),
|
| 197 |
+
gr.Interface(
|
| 198 |
+
fn=list_retrievers,
|
| 199 |
+
inputs=gr.Textbox(label="Fuente (opcional)", placeholder="Dejar vacío para listar todos"),
|
| 200 |
+
outputs=gr.JSON(label="Lista de retrievers"),
|
| 201 |
+
title="Lista de Retrievers",
|
| 202 |
+
description="Muestra los retrievers disponibles, opcionalmente filtrados por fuente."
|
| 203 |
+
)
|
| 204 |
+
],
|
| 205 |
+
[
|
| 206 |
+
"Búsqueda ArXiv",
|
| 207 |
+
"Lista de Retrievers"
|
| 208 |
+
]
|
| 209 |
)
|
| 210 |
|
| 211 |
demo.launch(mcp_server=True)
|