verirl-env / models.py
Supreeth's picture
Upload folder using huggingface_hub
e3ca86e 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 VeriRL Verilog hardware design environment.
Agents write and verify Verilog RTL for AI-accelerator hardware primitives,
receiving feedback from real EDA tools (iverilog, yosys).
"""
from typing import Dict, Optional
from pydantic import Field
try:
from openenv.core.env_server.types import Action, Observation, State
except ImportError:
from openenv.core.env_server.types import Action, Observation, State
class VerirlAction(Action):
"""Action for the VeriRL environment — Verilog code submission and EDA tool invocations."""
action_type: str = Field(
...,
description=(
"One of: write_file, run_compile, run_sim, run_synth, "
"run_formal, list_files, submit"
),
)
verilog_src: Optional[str] = Field(
default=None, description="Verilog source code (required for write_file)"
)
filename: Optional[str] = Field(
default=None,
description=(
"Target filename for write_file (e.g. 'pe.v', 'top.v'). "
"Defaults to 'design.v' if omitted."
),
)
message: Optional[str] = Field(
default=None, description="Agent reasoning note (logged but not graded)"
)
class VerirlObservation(Observation):
"""Observation from the VeriRL environment — EDA tool feedback and episode status."""
task_spec: str = Field(default="", description="Full task specification (markdown)")
tool_stdout: str = Field(default="", description="EDA tool stdout output")
tool_stderr: str = Field(default="", description="EDA tool stderr / error messages")
compile_ok: bool = Field(default=False, description="Whether current code compiles")
tests_passed: int = Field(default=0, ge=0, description="Simulation tests passed")
tests_total: int = Field(default=0, ge=0, description="Total simulation tests")
turn_number: int = Field(default=0, ge=0, description="Current turn number")
turns_remaining: int = Field(default=0, ge=0, description="Turns remaining in episode")
current_verilog: Optional[str] = Field(
default=None,
description="Primary Verilog source (design.v); use current_files for multi-file projects",
)
current_files: Optional[Dict[str, str]] = Field(
default=None,
description="All files currently on disk: {filename: source_code}",
)
formal_properties_proven: Optional[int] = Field(
default=None, description="Number of formal properties proven (run_formal)"
)
formal_properties_total: Optional[int] = Field(
default=None, description="Total formal properties checked"
)
final_score: Optional[float] = Field(
default=None, description="Final score in [0.01, 0.99] (set on submit or episode expiry)"
)
score_breakdown: Optional[Dict[str, float]] = Field(
default=None, description="Per-dimension scores: compile, sim, timing, area, formal"
)
class VerirlState(State):
"""State for the VeriRL environment."""
task_id: Optional[str] = Field(default=None, description="Current task ID")
compile_ok: bool = Field(default=False, description="Whether code currently compiles")
tests_passed: int = Field(default=0, ge=0, description="Simulation tests passed")
tests_total: int = Field(default=0, ge=0, description="Total simulation tests")
total_reward: float = Field(default=0.0, description="Cumulative reward this episode")
turns_remaining: int = Field(default=0, ge=0, description="Turns remaining")
episode_done: bool = Field(default=False, description="Whether episode is over")
final_score: Optional[float] = Field(
default=None, description="Final score in [0.01, 0.99] if episode is done"
)