Nanda Kumar Kondreddy commited on
Commit
f2a42f5
·
1 Parent(s): 270a32f

CRITICAL FIX: Replace /reset middleware with direct endpoint override - ensure base fields included

Browse files
Files changed (1) hide show
  1. server/app.py +43 -0
server/app.py CHANGED
@@ -7,6 +7,8 @@ import json
7
  import gradio as gr
8
  from starlette.middleware.base import BaseHTTPMiddleware
9
  from starlette.responses import JSONResponse
 
 
10
 
11
  from openenv.core.env_server import create_fastapi_app
12
  from server.models import ConfigDebugAction, ConfigDebugObservation, ConfigDebugState
@@ -23,6 +25,14 @@ app = create_fastapi_app(
23
 
24
  # ---- Override OpenEnv's default /metadata route ----
25
  # Remove the built-in metadata endpoint so we can replace it with task enumeration
 
 
 
 
 
 
 
 
26
  for i, route in enumerate(app.router.routes):
27
  if hasattr(route, "path") and route.path == "/metadata":
28
  app.router.routes.pop(i)
@@ -204,6 +214,39 @@ def metadata():
204
  }
205
 
206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  @app.get("/tasks")
208
  def tasks():
209
  return {
 
7
  import gradio as gr
8
  from starlette.middleware.base import BaseHTTPMiddleware
9
  from starlette.responses import JSONResponse
10
+ from starlette.types import ASGIApp, Receive, Scope, Send
11
+ from typing import Callable
12
 
13
  from openenv.core.env_server import create_fastapi_app
14
  from server.models import ConfigDebugAction, ConfigDebugObservation, ConfigDebugState
 
25
 
26
  # ---- Override OpenEnv's default /metadata route ----
27
  # Remove the built-in metadata endpoint so we can replace it with task enumeration
28
+ reset_endpoint = None
29
+ for i, route in enumerate(app.router.routes):
30
+ if hasattr(route, "path") and route.path == "/reset":
31
+ reset_endpoint = route.endpoint
32
+ app.router.routes.pop(i)
33
+ print("[APP_INIT] Removed default /reset route for schema fix")
34
+ break
35
+
36
  for i, route in enumerate(app.router.routes):
37
  if hasattr(route, "path") and route.path == "/metadata":
38
  app.router.routes.pop(i)
 
214
  }
215
 
216
 
217
+ @app.post("/reset")
218
+ async def reset_env(request):
219
+ """Override /reset endpoint to return correct OpenEnv contract schema.
220
+
221
+ Must include: observation, done, reward, metadata, info
222
+ """
223
+ print("[VALIDATOR] POST /reset called - CUSTOM OVERRIDE")
224
+
225
+ if reset_endpoint:
226
+ try:
227
+ # Call the original OpenEnv reset endpoint
228
+ response = await reset_endpoint(request)
229
+
230
+ # If it's a dict, wrap it correctly
231
+ if isinstance(response, dict) and "observation" in response:
232
+ fixed_response = {
233
+ "observation": response["observation"],
234
+ "done": response.get("done", False),
235
+ "reward": response.get("reward"),
236
+ "metadata": response.get("metadata", {}),
237
+ "info": {}
238
+ }
239
+ print("[VALIDATOR] Reset response wrapped with base fields")
240
+ return fixed_response
241
+ return response
242
+ except Exception as e:
243
+ print(f"[VALIDATOR] Error in custom reset: {e}")
244
+ raise
245
+ else:
246
+ print("[VALIDATOR] ERROR: reset_endpoint not saved")
247
+ raise RuntimeError("Reset endpoint initialization failed")
248
+
249
+
250
  @app.get("/tasks")
251
  def tasks():
252
  return {