geronimo-pericoli commited on
Commit
3bc496b
·
verified ·
1 Parent(s): 8b49bfd

Update server.py

Browse files
Files changed (1) hide show
  1. server.py +33 -24
server.py CHANGED
@@ -42,6 +42,7 @@ Settings.embed_model = embed_model
42
 
43
 
44
 
 
45
  DOCUMENTS_BASE_PATH = "./"
46
  RETRIEVERS_JSON_PATH = Path("./retrievers.json")
47
 
@@ -63,6 +64,7 @@ indices: Dict[str, VectorStoreIndex] = {}
63
  for source, rel_path in SOURCES.items():
64
  full_path = os.path.join(DOCUMENTS_BASE_PATH, rel_path)
65
  if not os.path.exists(full_path):
 
66
  continue
67
 
68
  for root, dirs, files in os.walk(full_path):
@@ -77,6 +79,7 @@ for source, rel_path in SOURCES.items():
77
 
78
 
79
 
 
80
 
81
 
82
 
@@ -86,14 +89,21 @@ mcp = FastMCP("OnBase", port=port)
86
 
87
 
88
 
 
89
  @mcp.resource(
90
  uri="info://available_retrievers",
91
  name="AvailableRetrievers",
92
- description="Lista completa de retrievers disponibles",
93
  mime_type="application/json"
94
  )
95
  def get_available_retrievers() -> dict:
96
- # Generar automáticamente la lista desde el JSON
 
 
 
 
 
 
97
  available = []
98
 
99
  for source, indexes in retrievers_metadata.items():
@@ -101,16 +111,17 @@ def get_available_retrievers() -> dict:
101
  available.append({
102
  "name": index_name,
103
  "source": source,
 
104
  "description": metadata.get("description", ""),
105
- "content_info": metadata.get("content_info", "")
106
  })
107
 
108
  return {
109
  "retrievers": available,
110
- "sources": list(retrievers_metadata.keys()),
111
  "count": len(available)
112
  }
113
 
 
114
  @mcp.tool()
115
  def retrieve_docs(
116
  query: str,
@@ -118,21 +129,17 @@ def retrieve_docs(
118
  top_k: int = 3
119
  ) -> dict:
120
  """
121
- Realiza búsqueda semántica en los documentos indexados.
122
 
123
  Parámetros:
124
- query (str, requerido): Texto de búsqueda. Ejemplo: "vacunas COVID-19"
125
- retrievers (List[str], requerido): Lista de nombres de retrievers a consultar.
126
- Ejemplo: ["vec_who_1", "fda_tree_1"]
127
- top_k (int, opcional): Número máximo de resultados por retriever. Default: 3
128
-
129
- Retorna:
130
- dict
131
 
132
- Ejemplo de uso:
133
  retrieve_docs(
134
- query="guías de vacunación",
135
- retrievers=["vec_who_2"],
136
  top_k=2
137
  )
138
  """
@@ -148,16 +155,15 @@ def retrieve_docs(
148
  retriever = indices[name].as_retriever(similarity_top_k=top_k)
149
  nodes = retriever.retrieve(query)
150
 
151
- # Obtener metadatos del JSON
152
- metadata = {}
153
- source = "unknown"
154
- for src, indexes in retrievers_metadata.items():
155
- if name in indexes:
156
- metadata = indexes[name]
157
- source = src
158
- break
159
 
160
  results[name] = {
 
161
  "documents": [
162
  {
163
  "content": node.get_content(),
@@ -167,7 +173,10 @@ def retrieve_docs(
167
  for node in nodes
168
  ],
169
  "description": metadata.get("description", ""),
170
- "source": source
 
 
 
171
  }
172
  except Exception as e:
173
  results[name] = {"error": str(e)}
 
42
 
43
 
44
 
45
+ # Configuración de paths
46
  DOCUMENTS_BASE_PATH = "./"
47
  RETRIEVERS_JSON_PATH = Path("./retrievers.json")
48
 
 
64
  for source, rel_path in SOURCES.items():
65
  full_path = os.path.join(DOCUMENTS_BASE_PATH, rel_path)
66
  if not os.path.exists(full_path):
67
+ print(f"Advertencia: No se encontró la ruta para {source}")
68
  continue
69
 
70
  for root, dirs, files in os.walk(full_path):
 
79
 
80
 
81
 
82
+
83
 
84
 
85
 
 
89
 
90
 
91
 
92
+ # Resource para listar retrievers
93
  @mcp.resource(
94
  uri="info://available_retrievers",
95
  name="AvailableRetrievers",
96
+ description="Lista todos los retrievers disponibles con sus metadatos",
97
  mime_type="application/json"
98
  )
99
  def get_available_retrievers() -> dict:
100
+ """
101
+ Devuelve lista completa de retrievers con:
102
+ - Nombre del índice
103
+ - Título del documento
104
+ - Descripción
105
+ - Fecha de actualización
106
+ """
107
  available = []
108
 
109
  for source, indexes in retrievers_metadata.items():
 
111
  available.append({
112
  "name": index_name,
113
  "source": source,
114
+ "title": metadata.get("title", ""),
115
  "description": metadata.get("description", ""),
116
+ "last_updated": metadata.get("last_updated", "")
117
  })
118
 
119
  return {
120
  "retrievers": available,
 
121
  "count": len(available)
122
  }
123
 
124
+ # Función principal de búsqueda
125
  @mcp.tool()
126
  def retrieve_docs(
127
  query: str,
 
129
  top_k: int = 3
130
  ) -> dict:
131
  """
132
+ Realiza búsqueda semántica en documentos indexados.
133
 
134
  Parámetros:
135
+ query (str): Texto de búsqueda (requerido)
136
+ retrievers (List[str]): Nombres de retrievers a consultar (requerido)
137
+ top_k (int): Número de resultados por retriever (opcional, default=3)
 
 
 
 
138
 
139
+ Ejemplo:
140
  retrieve_docs(
141
+ query="estándares farmacéuticos",
142
+ retrievers=["vec_who_1"],
143
  top_k=2
144
  )
145
  """
 
155
  retriever = indices[name].as_retriever(similarity_top_k=top_k)
156
  nodes = retriever.retrieve(query)
157
 
158
+ # Obtener metadatos
159
+ metadata = next(
160
+ (meta for src in retrievers_metadata.values()
161
+ for idx, meta in src.items() if idx == name),
162
+ {}
163
+ )
 
 
164
 
165
  results[name] = {
166
+ "title": metadata.get("title", name),
167
  "documents": [
168
  {
169
  "content": node.get_content(),
 
173
  for node in nodes
174
  ],
175
  "description": metadata.get("description", ""),
176
+ "source": next(
177
+ (s for s, idx in retrievers_metadata.items() if name in idx),
178
+ "unknown"
179
+ )
180
  }
181
  except Exception as e:
182
  results[name] = {"error": str(e)}