Spaces:
Sleeping
Sleeping
Update server.py
Browse files
server.py
CHANGED
|
@@ -80,7 +80,7 @@ for source, rel_path in SOURCES.items():
|
|
| 80 |
storage_path = os.path.join(root, "storage_nodes")
|
| 81 |
storage_context = StorageContext.from_defaults(persist_dir=storage_path)
|
| 82 |
index_name = os.path.basename(root)
|
| 83 |
-
indices[index_name] = load_index_from_storage(storage_context)
|
| 84 |
logger.info(f"Índice cargado correctamente: {index_name}")
|
| 85 |
except Exception as e:
|
| 86 |
logger.error(f"Error cargando índice {index_name}: {str(e)}", exc_info=True)
|
|
@@ -241,7 +241,7 @@ async def list_retrievers(ctx: Context, source: str = None) -> dict:
|
|
| 241 |
|
| 242 |
|
| 243 |
|
| 244 |
-
# Función
|
| 245 |
@mcp.tool()
|
| 246 |
def retrieve_docs(
|
| 247 |
query: str,
|
|
@@ -255,26 +255,27 @@ def retrieve_docs(
|
|
| 255 |
query (str): Texto de búsqueda (requerido)
|
| 256 |
retrievers (List[str]): Nombres de retrievers a consultar (requerido)
|
| 257 |
top_k (int): Número de resultados por retriever (opcional, default=3)
|
| 258 |
-
|
| 259 |
-
Ejemplo:
|
| 260 |
-
retrieve_docs(
|
| 261 |
-
query="estándares farmacéuticos",
|
| 262 |
-
retrievers=["vec_1", "vec_2"],
|
| 263 |
-
top_k=2
|
| 264 |
-
)
|
| 265 |
"""
|
|
|
|
|
|
|
|
|
|
| 266 |
results = {}
|
| 267 |
invalid = []
|
| 268 |
|
| 269 |
for name in retrievers:
|
| 270 |
if name not in indices:
|
|
|
|
| 271 |
invalid.append(name)
|
| 272 |
continue
|
| 273 |
|
| 274 |
try:
|
|
|
|
|
|
|
| 275 |
# 1. Obtener el índice y realizar la búsqueda
|
|
|
|
| 276 |
retriever = indices[name].as_retriever(similarity_top_k=top_k)
|
| 277 |
nodes = retriever.retrieve(query)
|
|
|
|
| 278 |
|
| 279 |
# 2. Buscar metadatos COMPLETOS
|
| 280 |
metadata = {}
|
|
@@ -284,8 +285,9 @@ def retrieve_docs(
|
|
| 284 |
metadata = indexes[name]
|
| 285 |
source = src
|
| 286 |
break
|
|
|
|
| 287 |
|
| 288 |
-
# 3. Construir respuesta
|
| 289 |
results[name] = {
|
| 290 |
"title": metadata.get("title", name),
|
| 291 |
"documents": [
|
|
@@ -300,8 +302,10 @@ def retrieve_docs(
|
|
| 300 |
"source": source,
|
| 301 |
"last_updated": metadata.get("last_updated", "")
|
| 302 |
}
|
|
|
|
| 303 |
|
| 304 |
except Exception as e:
|
|
|
|
| 305 |
results[name] = {
|
| 306 |
"error": str(e),
|
| 307 |
"retriever": name
|
|
@@ -315,11 +319,13 @@ def retrieve_docs(
|
|
| 315 |
}
|
| 316 |
|
| 317 |
if invalid:
|
|
|
|
| 318 |
response["warnings"] = {
|
| 319 |
"invalid_retrievers": invalid,
|
| 320 |
"valid_options": list(indices.keys())
|
| 321 |
}
|
| 322 |
|
|
|
|
| 323 |
return response
|
| 324 |
|
| 325 |
|
|
|
|
| 80 |
storage_path = os.path.join(root, "storage_nodes")
|
| 81 |
storage_context = StorageContext.from_defaults(persist_dir=storage_path)
|
| 82 |
index_name = os.path.basename(root)
|
| 83 |
+
indices[index_name] = load_index_from_storage(storage_context) #, index_id="vector_index"
|
| 84 |
logger.info(f"Índice cargado correctamente: {index_name}")
|
| 85 |
except Exception as e:
|
| 86 |
logger.error(f"Error cargando índice {index_name}: {str(e)}", exc_info=True)
|
|
|
|
| 241 |
|
| 242 |
|
| 243 |
|
| 244 |
+
# Función de retrievers
|
| 245 |
@mcp.tool()
|
| 246 |
def retrieve_docs(
|
| 247 |
query: str,
|
|
|
|
| 255 |
query (str): Texto de búsqueda (requerido)
|
| 256 |
retrievers (List[str]): Nombres de retrievers a consultar (requerido)
|
| 257 |
top_k (int): Número de resultados por retriever (opcional, default=3)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 258 |
"""
|
| 259 |
+
logger.info(f"Iniciando búsqueda para query: '{query}'")
|
| 260 |
+
logger.debug(f"Parámetros - retrievers: {retrievers}, top_k: {top_k}")
|
| 261 |
+
|
| 262 |
results = {}
|
| 263 |
invalid = []
|
| 264 |
|
| 265 |
for name in retrievers:
|
| 266 |
if name not in indices:
|
| 267 |
+
logger.warning(f"Retriever no encontrado: {name}")
|
| 268 |
invalid.append(name)
|
| 269 |
continue
|
| 270 |
|
| 271 |
try:
|
| 272 |
+
logger.info(f"Procesando retriever: {name}")
|
| 273 |
+
|
| 274 |
# 1. Obtener el índice y realizar la búsqueda
|
| 275 |
+
logger.debug(f"Creando retriever para {name} con top_k={top_k}")
|
| 276 |
retriever = indices[name].as_retriever(similarity_top_k=top_k)
|
| 277 |
nodes = retriever.retrieve(query)
|
| 278 |
+
logger.info(f"Retrieved {len(nodes)} documentos de {name}")
|
| 279 |
|
| 280 |
# 2. Buscar metadatos COMPLETOS
|
| 281 |
metadata = {}
|
|
|
|
| 285 |
metadata = indexes[name]
|
| 286 |
source = src
|
| 287 |
break
|
| 288 |
+
logger.debug(f"Metadatos encontrados para {name}: {metadata.keys()}")
|
| 289 |
|
| 290 |
+
# 3. Construir respuesta
|
| 291 |
results[name] = {
|
| 292 |
"title": metadata.get("title", name),
|
| 293 |
"documents": [
|
|
|
|
| 302 |
"source": source,
|
| 303 |
"last_updated": metadata.get("last_updated", "")
|
| 304 |
}
|
| 305 |
+
logger.info(f"Retriever {name} procesado exitosamente")
|
| 306 |
|
| 307 |
except Exception as e:
|
| 308 |
+
logger.error(f"Error procesando retriever {name}: {str(e)}", exc_info=True)
|
| 309 |
results[name] = {
|
| 310 |
"error": str(e),
|
| 311 |
"retriever": name
|
|
|
|
| 319 |
}
|
| 320 |
|
| 321 |
if invalid:
|
| 322 |
+
logger.warning(f"Retrievers inválidos: {invalid}. Opciones válidas: {list(indices.keys())}")
|
| 323 |
response["warnings"] = {
|
| 324 |
"invalid_retrievers": invalid,
|
| 325 |
"valid_options": list(indices.keys())
|
| 326 |
}
|
| 327 |
|
| 328 |
+
logger.info(f"Búsqueda completada. Total resultados: {len(results)}")
|
| 329 |
return response
|
| 330 |
|
| 331 |
|