Hafnium49 commited on
Commit
76a7226
·
verified ·
1 Parent(s): 8d82b32

Add /debug endpoint and accurate /health model reporting

Browse files
Files changed (1) hide show
  1. main.py +31 -2
main.py CHANGED
@@ -50,6 +50,7 @@ esen_backbone_hook = None # forward hook on backbone to capture node_embedding
50
  mm_model = None
51
  ofm_model = None
52
  models_loaded = False
 
53
 
54
 
55
  class BackboneHook:
@@ -85,6 +86,7 @@ class EmbedResponse(BaseModel):
85
  class HealthResponse(BaseModel):
86
  status: str
87
  models_loaded: bool
 
88
  vector_dims: dict[str, int]
89
 
90
 
@@ -128,6 +130,8 @@ def load_models():
128
 
129
  print(f" eSEN loaded successfully! (dataset: {esen_dataset})")
130
  except Exception as e:
 
 
131
  print(f" Warning: Could not load eSEN: {e}")
132
  print(" eSEN embeddings will not be available.")
133
 
@@ -143,6 +147,8 @@ def load_models():
143
 
144
  print(" l-MM and l-OFM loaded successfully!")
145
  except Exception as e:
 
 
146
  print(f" Warning: Could not load MEGNet featurizers: {e}")
147
 
148
  models_loaded = True
@@ -187,14 +193,37 @@ async def startup_event():
187
 
188
  @app.get("/health", response_model=HealthResponse)
189
  async def health_check():
190
- """Health check endpoint."""
 
 
 
 
 
 
 
 
 
 
 
191
  return HealthResponse(
192
  status="healthy" if models_loaded else "loading",
193
  models_loaded=models_loaded,
194
- vector_dims={"esen": ESEN_DIM, "l_mm": MM_DIM, "l_ofm": OFM_DIM},
 
195
  )
196
 
197
 
 
 
 
 
 
 
 
 
 
 
 
198
  @app.post("/embed", response_model=EmbedResponse)
199
  async def embed_structure(req: CifRequest):
200
  """
 
50
  mm_model = None
51
  ofm_model = None
52
  models_loaded = False
53
+ load_errors = {} # {model_name: error_string} for diagnostics
54
 
55
 
56
  class BackboneHook:
 
86
  class HealthResponse(BaseModel):
87
  status: str
88
  models_loaded: bool
89
+ available_models: list[str]
90
  vector_dims: dict[str, int]
91
 
92
 
 
130
 
131
  print(f" eSEN loaded successfully! (dataset: {esen_dataset})")
132
  except Exception as e:
133
+ import traceback
134
+ load_errors["esen"] = f"{e}\n{traceback.format_exc()}"
135
  print(f" Warning: Could not load eSEN: {e}")
136
  print(" eSEN embeddings will not be available.")
137
 
 
147
 
148
  print(" l-MM and l-OFM loaded successfully!")
149
  except Exception as e:
150
+ import traceback
151
+ load_errors["megnet"] = f"{e}\n{traceback.format_exc()}"
152
  print(f" Warning: Could not load MEGNet featurizers: {e}")
153
 
154
  models_loaded = True
 
193
 
194
  @app.get("/health", response_model=HealthResponse)
195
  async def health_check():
196
+ """Health check endpoint — reports which models actually loaded."""
197
+ available = []
198
+ dims = {}
199
+ if esen_predictor is not None:
200
+ available.append("esen")
201
+ dims["esen"] = ESEN_DIM
202
+ if mm_model is not None:
203
+ available.append("l_mm")
204
+ dims["l_mm"] = MM_DIM
205
+ if ofm_model is not None:
206
+ available.append("l_ofm")
207
+ dims["l_ofm"] = OFM_DIM
208
  return HealthResponse(
209
  status="healthy" if models_loaded else "loading",
210
  models_loaded=models_loaded,
211
+ available_models=available,
212
+ vector_dims=dims,
213
  )
214
 
215
 
216
+ @app.get("/debug")
217
+ async def debug_info():
218
+ """Diagnostic endpoint showing model load status and errors."""
219
+ return {
220
+ "esen_loaded": esen_predictor is not None,
221
+ "mm_loaded": mm_model is not None,
222
+ "ofm_loaded": ofm_model is not None,
223
+ "load_errors": load_errors,
224
+ }
225
+
226
+
227
  @app.post("/embed", response_model=EmbedResponse)
228
  async def embed_structure(req: CifRequest):
229
  """