doom_env / server /app.py
Crashbandicoote2's picture
Upload folder using huggingface_hub
952f360 verified
# 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 Doom Env Environment.
This module creates an HTTP server that exposes the DoomEnvironment
over HTTP endpoints, making it compatible with HTTPEnvClient.
Usage:
# Development (with auto-reload):
uvicorn server.app:app --reload --host 0.0.0.0 --port 8000
# Production:
uvicorn server.app:app --host 0.0.0.0 --port 8000 --workers 4
# Or run directly:
python -m server.app
"""
try:
from openenv_core.env_server.http_server import create_app
except Exception as e: # pragma: no cover
raise ImportError(
"openenv_core is required for the web interface. Install dependencies with '\n uv sync\n'"
) from e
try:
from ..models import DoomAction, DoomObservation
from .doom_env_environment import DoomEnvironment
except ImportError:
from doom_env.server.doom_env_environment import DoomEnvironment
from doom_env.models import DoomAction, DoomObservation
import os
# Read configuration from environment variables
scenario = os.getenv("DOOM_SCENARIO", "basic")
screen_resolution = os.getenv("DOOM_SCREEN_RESOLUTION", "RES_160X120")
screen_format = os.getenv("DOOM_SCREEN_FORMAT", "RGB24")
window_visible = os.getenv("DOOM_WINDOW_VISIBLE", "false").lower() in ("true", "1", "yes")
# Create the environment instance with configuration
env = DoomEnvironment(
scenario=scenario,
screen_resolution=screen_resolution,
screen_format=screen_format,
window_visible=window_visible,
use_discrete_actions=True,
)
# Create the app with web interface and README integration
app = create_app(
env,
DoomAction,
DoomObservation,
env_name="doom_env",
)
def main():
"""
Entry point for direct execution via uv run or python -m.
This function enables running the server without Docker:
uv run --project . server
python -m envs.doom_env.server.app
openenv serve doom_env
For production deployments, use uvicorn directly:
uvicorn envs.doom_env.server.app:app --workers 4
"""
import uvicorn
print(f"Doom Environment Configuration:")
print(f" Scenario: {scenario}")
print(f" Resolution: {screen_resolution}")
print(f" Format: {screen_format}")
print(f" Window Visible: {window_visible}")
print(f"\nStarting server on http://0.0.0.0:8000")
uvicorn.run(app, host="0.0.0.0", port=8000)
if __name__ == "__main__":
main()