sankadash's picture
Upload folder using huggingface_hub
7a938e3 verified
Raw
History Blame Contribute Delete
2.58 kB
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
"""
FastAPI application for the Incident Response Environment.
Endpoints:
- POST /reset: Reset the environment
- POST /step: Execute an action
- GET /state: Get current environment state
- GET /schema: Get action/observation schemas
- WS /ws: WebSocket endpoint for persistent sessions
- /web: Custom Incident Response dashboard
"""
try:
from openenv.core.env_server.http_server import create_app
except Exception as e: # pragma: no cover
raise ImportError(
"openenv is required for the web interface. Install dependencies with '\n uv sync\n'"
) from e
try:
from ..models import IncidentResponseAction, IncidentResponseObservation
from .incident_response_environment import IncidentResponseEnvironment
from .gradio_app import build_gradio_demo
except (ImportError, ModuleNotFoundError):
from models import IncidentResponseAction, IncidentResponseObservation
from server.incident_response_environment import IncidentResponseEnvironment
from server.gradio_app import build_gradio_demo
def _custom_gradio_builder(web_manager, action_fields, metadata, is_chat_env, title, quick_start_md):
"""Wrapper that adapts our custom UI to the gradio_builder signature expected by create_app.
Our build_gradio_demo() creates its own environment instances internally,
so we ignore the web_manager and just return our custom Blocks.
"""
return build_gradio_demo()
# Create the app with custom Gradio UI.
# When ENABLE_WEB_INTERFACE=true (set by openenv push for HF Spaces),
# create_app uses our _custom_gradio_builder for /web instead of the default.
# When false (local dev), we mount it manually below.
app = create_app(
IncidentResponseEnvironment,
IncidentResponseAction,
IncidentResponseObservation,
env_name="incident_response",
max_concurrent_envs=1,
gradio_builder=_custom_gradio_builder,
)
# For local dev (ENABLE_WEB_INTERFACE not set), mount manually so /web works
import os
if os.getenv("ENABLE_WEB_INTERFACE", "false").lower() not in ("true", "1", "yes"):
import gradio as gr
gradio_demo = build_gradio_demo()
gr.mount_gradio_app(app, gradio_demo, path="/web", root_path="/web")
def main(host: str = "0.0.0.0", port: int = 8000):
import uvicorn
uvicorn.run(app, host=host, port=port)
if __name__ == "__main__":
main()