burtenshaw's picture
burtenshaw HF Staff
Upload folder using huggingface_hub
3a3bc0e verified
# server/app.py
import os
from fastapi.responses import HTMLResponse
from openenv.core.env_server.http_server import create_app
from openenv.core.env_server.web_interface import load_environment_metadata
from ..models import WildfireAction, WildfireObservation
from .wildfire_environment import WildfireEnvironment
from .wildfire_web_interface import get_wildfire_web_interface_html
W = int(os.getenv("WILDFIRE_WIDTH", "16"))
H = int(os.getenv("WILDFIRE_HEIGHT", "16"))
# Factory function to create WildfireEnvironment instances
def create_wildfire_environment():
"""Factory function that creates WildfireEnvironment with config."""
return WildfireEnvironment(width=W, height=H)
# Check if web interface should be enabled for custom routes
enable_web = (
os.getenv("ENABLE_WEB_INTERFACE", "false").lower() in ("true", "1", "yes")
)
# Create the app with web interface support
# create_app handles ENABLE_WEB_INTERFACE automatically
app = create_app(
create_wildfire_environment,
WildfireAction,
WildfireObservation,
env_name="wildfire_env",
)
# Override the default /web route with our custom wildfire interface
# This must be done AFTER create_app to ensure it overrides the default route
if enable_web:
# Load metadata for custom wildfire interface
env_instance = create_wildfire_environment()
metadata = load_environment_metadata(env_instance, "wildfire_env")
# Remove any existing /web GET route and add our custom one
# FastAPI uses the first matching route, so we need to remove the default one first
routes_to_remove = []
for route in app.routes:
# Check if this is a GET route for /web
if hasattr(route, 'path') and route.path == '/web':
if hasattr(route, 'methods') and 'GET' in route.methods:
routes_to_remove.append(route)
elif hasattr(route, 'methods') and not route.methods: # Some route types don't have methods
# Check if it's a GET route by inspecting the endpoint
routes_to_remove.append(route)
for route in routes_to_remove:
app.routes.remove(route)
# Add our custom wildfire interface route (overrides default /web)
@app.get("/web", response_class=HTMLResponse)
async def wildfire_web_interface():
"""Custom wildfire-specific web interface."""
return get_wildfire_web_interface_html(metadata)
def main():
"""Main entry point for running the server."""
import uvicorn
port = int(os.getenv("PORT", "8000"))
uvicorn.run(app, host="0.0.0.0", port=port)
if __name__ == "__main__":
main()