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- 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 {
|