burtenshaw's picture
burtenshaw HF Staff
Upload folder using huggingface_hub
817afd2 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.
"""
Data models for the NetHack Learning Environment (NLE).
The NLE environment wraps the NetHack 3.6.6 game as a reinforcement learning
environment, providing rich observations and a complex action space.
"""
from __future__ import annotations
from dataclasses import dataclass
from typing import Any, Dict, List, Optional
from core.env_server import Action, Observation, State
@dataclass
class NLEAction(Action):
"""
Action for the NetHack Learning Environment.
Uses discrete action space where action_id maps to NetHack commands
(movement, interactions, etc.). The action space has ~113 actions.
Examples:
- action_id=0: Move North (k)
- action_id=1: Move East (l)
- action_id=37: Eat (e)
- action_id=50: Search (s)
"""
action_id: int # Index into nethack.USEFUL_ACTIONS (0-112)
@dataclass
class NLEObservation(Observation):
"""
Observation from the NetHack Learning Environment.
Contains a subset of NLE's 14+ observation types. All numpy arrays are
serialized as nested lists for JSON compatibility.
Observation types (all optional, configured at env creation):
- glyphs: (21, 79) - Symbolic dungeon map representation
- chars: (21, 79) - ASCII character display
- colors: (21, 79) - Color codes for display
- specials: (21, 79) - Special attributes
- blstats: (26,) - Bottom-line stats (HP, XP, gold, etc.)
- message: (256,) - Game message as byte array
- inv_glyphs: (55,) - Inventory item glyphs
- inv_strs: (55, 80) - Inventory item descriptions
- inv_letters: (55,) - Inventory item letters (a-z, A-Z)
- inv_oclasses: (55,) - Inventory object classes
- tty_chars: (24, 80) - Full terminal character display
- tty_colors: (24, 80) - Full terminal colors
- tty_cursor: (2,) - Terminal cursor position [row, col]
- screen_descriptions: (21, 79, 80) - Text descriptions of dungeon
With beefy compute, we include all observations by default.
"""
# Core observations (always useful)
glyphs: Optional[List[List[int]]] = None
blstats: Optional[List[int]] = None
message: Optional[List[int]] = None
# Visual observations
chars: Optional[List[List[int]]] = None
colors: Optional[List[List[int]]] = None
specials: Optional[List[List[int]]] = None
# Inventory observations
inv_glyphs: Optional[List[int]] = None
inv_strs: Optional[List[List[int]]] = None
inv_letters: Optional[List[int]] = None
inv_oclasses: Optional[List[int]] = None
# Terminal observations (for rendering)
tty_chars: Optional[List[List[int]]] = None
tty_colors: Optional[List[List[int]]] = None
tty_cursor: Optional[List[int]] = None
# Extended observations
screen_descriptions: Optional[List[List[List[int]]]] = None
program_state: Optional[List[int]] = None
internal: Optional[List[int]] = None
misc: Optional[List[int]] = None
@dataclass
class NLEState(State):
"""
Extended state for the NLE environment.
Includes NetHack-specific state information beyond basic episode tracking.
"""
# NLE-specific state
game_over: bool = False
end_status: str = "RUNNING" # RUNNING, DEATH, TASK_SUCCESSFUL, ABORTED
in_normal_game: bool = False
character: str = "mon-hum-neu-mal" # role-race-gender-alignment
# Task-specific info
task_name: str = "NetHackScore-v0"