> This page is for version 0.6.0.
> For other versions, use one of these documentation indexes:
> - Main (default): https://docs.nvidia.com/nemo/gym/main/llms.txt
> - 0.7.0: https://docs.nvidia.com/nemo/gym/v0.7.0/llms.txt
> - 0.6.0: https://docs.nvidia.com/nemo/gym/v0.6.0/llms.txt
> - 0.5.1: https://docs.nvidia.com/nemo/gym/v0.5.1/llms.txt
> - 0.5.0: https://docs.nvidia.com/nemo/gym/v0.5.0/llms.txt
> - 0.4.0: https://docs.nvidia.com/nemo/gym/v0.4.0/llms.txt
> - 0.3.0: https://docs.nvidia.com/nemo/gym/v0.3.0/llms.txt
> - 0.2.1: https://docs.nvidia.com/nemo/gym/v0.2.1/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/gym/llms.txt.

# nemo_gym.web.models

Wire models for stateful, multimodal web environments.

## Module Contents

### Classes

| Name                                                                  | Description                                                            |
| --------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| [`WebAction`](#nemo_gym-web-models-WebAction)                         | Model-independent computer-use action accepted by visual browsers.     |
| [`WebActionLimits`](#nemo_gym-web-models-WebActionLimits)             | Runtime-owned waiting limits advertised when a browser session starts. |
| [`WebActionProfile`](#nemo_gym-web-models-WebActionProfile)           | -                                                                      |
| [`WebArtifactRef`](#nemo_gym-web-models-WebArtifactRef)               | Stable reference to an artifact retained outside a model request.      |
| [`WebBenchmark`](#nemo_gym-web-models-WebBenchmark)                   | -                                                                      |
| [`WebImage`](#nemo_gym-web-models-WebImage)                           | An image can be transported inline, retained as an artifact, or both.  |
| [`WebObservation`](#nemo_gym-web-models-WebObservation)               | JSON-safe observation sent from the browser runtime to the agent.      |
| [`WebObservationProfile`](#nemo_gym-web-models-WebObservationProfile) | -                                                                      |
| [`WebRuntimeProfile`](#nemo_gym-web-models-WebRuntimeProfile)         | Browser execution protocol exposed by Gym.                             |
| [`WebStepResult`](#nemo_gym-web-models-WebStepResult)                 | -                                                                      |
| [`WebTab`](#nemo_gym-web-models-WebTab)                               | -                                                                      |
| [`WebTask`](#nemo_gym-web-models-WebTask)                             | Normalized task envelope; original benchmark fields remain lossless.   |
| [`WebVerifierResult`](#nemo_gym-web-models-WebVerifierResult)         | -                                                                      |

### Data

[`BROWSER_TARGET_CLOSED_STATUS`](#nemo_gym-web-models-BROWSER_TARGET_CLOSED_STATUS)

[`CAPTCHA_BUDGET_EXHAUSTED_STATUS`](#nemo_gym-web-models-CAPTCHA_BUDGET_EXHAUSTED_STATUS)

### API

```python
class nemo_gym.web.models.WebAction()
```

**Bases:** `BaseModel`

Model-independent computer-use action accepted by visual browsers.

**`answer`** `Optional[str] = None`

---

**`arguments`** `dict[str, Any] = Field(default_factory=dict)`

---

**`metadata`** `dict[str, Any] = Field(default_factory=dict)`

---

**`name`** `str`

---

**`raw_model_output`** `str = ''`

---

**`script`** `str`

---

**`terminal`** `bool = False`

---

```python
class nemo_gym.web.models.WebActionLimits()
```

**Bases:** `BaseModel`

Runtime-owned waiting limits advertised when a browser session starts.

The default retains the historical tool contract. A benchmark profile may
permit longer waits without rewriting the model's requested duration.

**`max_step_wait_seconds`** `float | None`

---

**`max_wait_seconds`** `float`

---

```python
nemo_gym.web.models.WebActionLimits.validate_wait_budget() -> 'WebActionLimits'
```

```python
class nemo_gym.web.models.WebActionProfile
```

**Bases:** `enum.Enum`

**`COMPUTER_USE`** `= 'computer_use'`

---

```python
class nemo_gym.web.models.WebArtifactRef()
```

**Bases:** `BaseModel`

Stable reference to an artifact retained outside a model request.

**`mime_type`** `str`

---

**`sha256`** `str = Field(pattern='^[0-9a-f]{64}$')`

---

**`size_bytes`** `int = Field(ge=0)`

---

**`uri`** `str`

---

```python
class nemo_gym.web.models.WebBenchmark
```

**Bases:** `enum.Enum`

**`VISUALWEBARENA`** `= 'visualwebarena'`

---

**`WEBARENA`** `= 'webarena'`

---

**`WEBVOYAGER`** `= 'webvoyager'`

---

```python
class nemo_gym.web.models.WebImage()
```

**Bases:** `BaseModel`

An image can be transported inline, retained as an artifact, or both.

**`artifact`** `Optional[WebArtifactRef] = None`

---

**`data_url`** `Optional[str] = None`

---

```python
nemo_gym.web.models.WebImage.require_transport() -> 'WebImage'
```

```python
class nemo_gym.web.models.WebObservation()
```

**Bases:** `BaseModel`

JSON-safe observation sent from the browser runtime to the agent.

**`active_tab_index`** `int = Field(default=0, ge=0)`

---

**`axtree_text`** `str = ''`

---

**`elapsed_time`** `float = Field(default=0.0, ge=0.0)`

---

**`element_map`** `dict[str, dict[str, Any]] = Field(default_factory=dict)`

---

**`focused_element_id`** `str = ''`

---

**`goal`** `list[dict[str, Any]] = Field(default_factory=list)`

---

**`last_action`** `str = ''`

---

**`last_action_error`** `str = ''`

---

**`metadata`** `dict[str, Any] = Field(default_factory=dict)`

---

**`screenshot`** `Optional[WebImage] = None`

---

**`tabs`** `list[WebTab] = Field(default_factory=list)`

---

**`url`** `str = ''`

---

```python
class nemo_gym.web.models.WebObservationProfile
```

**Bases:** `enum.Enum`

**`A11Y`** `= 'a11y'`

---

**`SCREENSHOT`** `= 'screenshot'`

---

**`SOM`** `= 'som'`

---

```python
class nemo_gym.web.models.WebRuntimeProfile
```

**Bases:** `enum.Enum`

Browser execution protocol exposed by Gym.

Model-specific prompting is deliberately not represented here. Nano Omni,
Qwen, and future policies all drive the same visual browser runtime after
their policy adapters normalize actions into `WebAction`.

**`VISUAL_BROWSER`** `= 'visual_browser'`

---

```python
class nemo_gym.web.models.WebStepResult()
```

**Bases:** `BaseModel`

**`benchmark_reward`** `Optional[float] = None`

---

**`execution_ok`** `bool`

---

**`info`** `dict[str, Any] = Field(default_factory=dict)`

---

**`observation`** `WebObservation`

---

**`terminated`** `bool = False`

---

**`truncated`** `bool = False`

---

```python
class nemo_gym.web.models.WebTab()
```

**Bases:** `BaseModel`

**`active`** `bool = False`

---

**`index`** `int = Field(ge=0)`

---

**`title`** `str = ''`

---

**`url`** `str = ''`

---

```python
class nemo_gym.web.models.WebTask()
```

**Bases:** `BaseModel`

Normalized task envelope; original benchmark fields remain lossless.

**`action_profile`** `WebActionProfile = WebActionProfile.COMPUTER_USE`

---

**`auth_profile`** `Optional[str] = None`

---

**`benchmark`** `WebBenchmark`

---

**`input_images`** `list[str] = Field(default_factory=list)`

---

**`intent`** `str = ''`

---

**`model_config`** `= ConfigDict(extra='allow')`

---

**`observation_profile`** `Optional[WebObservationProfile] = WebObservationProfile.SCREENSHOT`

---

**`original_metadata`** `dict[str, Any] = Field(default_factory=dict)`

---

**`runtime_profile`** `WebRuntimeProfile = WebRuntimeProfile.VISUAL_BROWSER`

---

**`seed`** `int = 0`

---

**`sites`** `list[str] = Field(default_factory=list)`

---

**`start_urls`** `list[str] = Field(default_factory=list)`

---

**`task_id`** `str`

---

**`task_kwargs`** `dict[str, Any] = Field(default_factory=dict)`

---

**`verifier_profile`** `Optional[str] = None`

---

```python
nemo_gym.web.models.WebTask.stringify_task_id(
    value: typing.Any
) -> str
```

classmethod

```python
class nemo_gym.web.models.WebVerifierResult()
```

**Bases:** `BaseModel`

**`evidence`** `list[WebArtifactRef] = Field(default_factory=list)`

---

**`failure_kind`** `Optional[str] = None`

---

**`metadata`** `dict[str, Any] = Field(default_factory=dict)`

---

**`raw_score`** `float = 0.0`

---

**`reward`** `float = 0.0`

---

**`subscores`** `dict[str, float] = Field(default_factory=dict)`

---

**`task_success`** `bool = False`

---

**`valid_sample`** `bool = True`

---

**`verifier_version`** `str = ''`

---

```python
nemo_gym.web.models.BROWSER_TARGET_CLOSED_STATUS = 'browser_target_closed'
```

```python
nemo_gym.web.models.CAPTCHA_BUDGET_EXHAUSTED_STATUS = 'captcha_budget_exhausted'
```