geronimo-pericoli commited on
Commit
dbf30b9
verified
1 Parent(s): 48d30ee

Update server.py

Browse files
Files changed (1) hide show
  1. server.py +43 -44
server.py CHANGED
@@ -43,10 +43,9 @@ Settings.embed_model = embed_model
43
 
44
  # Configuraci贸n inicial
45
  DOCUMENTS_BASE_PATH = "./"
46
- SOURCES = {
47
- "oms": "oms/",
48
- #"fda": "fda/"
49
- }
50
 
51
  indices: Dict[str, VectorStoreIndex] = {}
52
 
@@ -62,17 +61,8 @@ for source, rel_path in SOURCES.items():
62
  try:
63
  storage_path = os.path.join(root, "storage_nodes")
64
  storage_context = StorageContext.from_defaults(persist_dir=storage_path)
65
-
66
- # Usamos directamente el nombre de la carpeta (vec_who_1, etc.)
67
  index_name = os.path.basename(root)
68
-
69
- index = load_index_from_storage(storage_context, index_id="vector_index")
70
- indices[index_name] = index # Guardamos con el nombre directo
71
-
72
- # Verificaci贸n opcional de metadatos
73
- if index_name not in retrievers_metadata.get(source, {}):
74
- print(f"Advertencia: No hay metadatos para {index_name} en retrievers.json")
75
-
76
  except Exception as e:
77
  print(f"Error cargando 铆ndice en {root}: {str(e)}")
78
  continue
@@ -91,36 +81,32 @@ mcp = FastMCP("OnBase", port=port)
91
  @mcp.resource(
92
  uri="info://available_retrievers",
93
  name="AvailableRetrievers",
94
- description="Lista completa de retrievers con metadatos",
95
  mime_type="application/json"
96
  )
97
  def get_available_retrievers() -> dict:
 
98
  available = []
99
 
100
- for index_name in indices.keys():
101
- # Determinar la fuente (oms/fda) basado en el prefijo
102
- source = "oms" if index_name.startswith("vec_who") else "fda"
103
-
104
- # Obtener metadatos
105
- metadata = retrievers_metadata.get(source, {}).get(index_name, {})
106
-
107
- available.append({
108
- "name": index_name, # Ej: "vec_who_1"
109
- "source": source,
110
- "description": metadata.get("description", "Descripci贸n no disponible"),
111
- "content_info": metadata.get("content_info", "Informaci贸n no disponible"),
112
- "last_updated": metadata.get("last_updated", "Desconocido")
113
- })
114
 
115
  return {
116
  "retrievers": available,
 
117
  "count": len(available)
118
  }
119
 
120
  @mcp.tool()
121
  def retrieve_docs(
122
  query: str,
123
- retrievers: List[str], # Nombres directos (vec_who_1, etc.)
124
  top_k: int = 3
125
  ) -> dict:
126
  results = {}
@@ -135,28 +121,41 @@ def retrieve_docs(
135
  retriever = indices[name].as_retriever(similarity_top_k=top_k)
136
  nodes = retriever.retrieve(query)
137
 
138
- results[name] = [
139
- {
140
- "content": node.get_content(),
141
- "metadata": node.metadata,
142
- "score": node.score
143
- }
144
- for node in nodes
145
- ]
 
 
 
 
 
 
 
 
 
 
 
146
  except Exception as e:
147
  results[name] = {"error": str(e)}
148
 
 
 
 
 
 
 
149
  if invalid:
150
- results["_warnings"] = {
151
  "invalid_retrievers": invalid,
152
  "valid_options": list(indices.keys())
153
  }
154
 
155
- return {
156
- "query": query,
157
- "results": results,
158
- "top_k": top_k
159
- }
160
 
161
 
162
 
 
43
 
44
  # Configuraci贸n inicial
45
  DOCUMENTS_BASE_PATH = "./"
46
+
47
+ # Cargar autom谩ticamente las fuentes desde el JSON
48
+ SOURCES = {source: f"{source.lower()}/" for source in retrievers_metadata.keys()}
 
49
 
50
  indices: Dict[str, VectorStoreIndex] = {}
51
 
 
61
  try:
62
  storage_path = os.path.join(root, "storage_nodes")
63
  storage_context = StorageContext.from_defaults(persist_dir=storage_path)
 
 
64
  index_name = os.path.basename(root)
65
+ indices[index_name] = index # Guardamos con nombre directo
 
 
 
 
 
 
 
66
  except Exception as e:
67
  print(f"Error cargando 铆ndice en {root}: {str(e)}")
68
  continue
 
81
  @mcp.resource(
82
  uri="info://available_retrievers",
83
  name="AvailableRetrievers",
84
+ description="Lista completa de retrievers disponibles",
85
  mime_type="application/json"
86
  )
87
  def get_available_retrievers() -> dict:
88
+ # Generar autom谩ticamente la lista desde el JSON
89
  available = []
90
 
91
+ for source, indexes in retrievers_metadata.items():
92
+ for index_name, metadata in indexes.items():
93
+ available.append({
94
+ "name": index_name,
95
+ "source": source,
96
+ "description": metadata.get("description", ""),
97
+ "content_info": metadata.get("content_info", "")
98
+ })
 
 
 
 
 
 
99
 
100
  return {
101
  "retrievers": available,
102
+ "sources": list(retrievers_metadata.keys()),
103
  "count": len(available)
104
  }
105
 
106
  @mcp.tool()
107
  def retrieve_docs(
108
  query: str,
109
+ retrievers: List[str],
110
  top_k: int = 3
111
  ) -> dict:
112
  results = {}
 
121
  retriever = indices[name].as_retriever(similarity_top_k=top_k)
122
  nodes = retriever.retrieve(query)
123
 
124
+ # Obtener metadatos del JSON si existen
125
+ metadata = {}
126
+ for source in retrievers_metadata.values():
127
+ if name in source:
128
+ metadata = source[name]
129
+ break
130
+
131
+ results[name] = {
132
+ "documents": [
133
+ {
134
+ "content": node.get_content(),
135
+ "metadata": node.metadata,
136
+ "score": node.score
137
+ }
138
+ for node in nodes
139
+ ],
140
+ "description": metadata.get("description", ""),
141
+ "source": next((s for s, idx in retrievers_metadata.items() if name in idx), "unknown")
142
+ }
143
  except Exception as e:
144
  results[name] = {"error": str(e)}
145
 
146
+ response = {
147
+ "query": query,
148
+ "results": results,
149
+ "top_k": top_k
150
+ }
151
+
152
  if invalid:
153
+ response["warnings"] = {
154
  "invalid_retrievers": invalid,
155
  "valid_options": list(indices.keys())
156
  }
157
 
158
+ return response
 
 
 
 
159
 
160
 
161