> This page is for version 0.4.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.session_control

Own web seed requests independently of the HTTP client's lifetime.

This is a web adapter, not a replacement for Gym's proposed core lifecycle
API. Keep task, browser and evaluator ownership in WebSessionManager.

## Module Contents

### Classes

| Name                                                                         | Description                                                           |
| ---------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| [`SessionIdentityError`](#nemo_gym-web-session_control-SessionIdentityError) | The request does not authorize access to the named web session.       |
| [`WebSessionControl`](#nemo_gym-web-session_control-WebSessionControl)       | Deduplicate seed, authorize cookie-less close, and retain tombstones. |
| [`_SessionRequest`](#nemo_gym-web-session_control-_SessionRequest)           | -                                                                     |

### Data

[`LOG`](#nemo_gym-web-session_control-LOG)

### API

```python
class nemo_gym.web.session_control.SessionIdentityError()
```

**Bases:** `RuntimeError`

The request does not authorize access to the named web session.

```python
class nemo_gym.web.session_control.WebSessionControl(
    manager: nemo_gym.web.session_manager.WebSessionManager,
    lifetime_seconds: float,
    max_records: int = 10000
)
```

Deduplicate seed, authorize cookie-less close, and retain tombstones.

**`_reaper`** `Task[None] | None = None`

---

**`_records`** `dict[str, _SessionRequest] = {}`

---

```python
nemo_gym.web.session_control.WebSessionControl._close_record(
    session_id: str,
    record: nemo_gym.web.session_control._SessionRequest
) -> bool
```

async

```python
nemo_gym.web.session_control.WebSessionControl._consume_exception(
    task: asyncio.Task
) -> None
```

staticmethod

```python
nemo_gym.web.session_control.WebSessionControl._finish_close(
    session_id: str,
    record: nemo_gym.web.session_control._SessionRequest
) -> bool
```

async

```python
nemo_gym.web.session_control.WebSessionControl._prune() -> None
```

```python
nemo_gym.web.session_control.WebSessionControl._reap() -> None
```

async

```python
nemo_gym.web.session_control.WebSessionControl._reap_once() -> None
```

async

```python
nemo_gym.web.session_control.WebSessionControl._record(
    identity: nemo_gym.web.api_models.WebSessionIdentity
) -> tuple[str, nemo_gym.web.session_control._SessionRequest]
```

```python
nemo_gym.web.session_control.WebSessionControl.close(
    identity: nemo_gym.web.api_models.WebSessionIdentity
) -> bool
```

async

```python
nemo_gym.web.session_control.WebSessionControl.seed(
    body: nemo_gym.web.api_models.WebSeedSessionRequest
) -> nemo_gym.web.api_models.WebSeedSessionResponse
```

async

```python
nemo_gym.web.session_control.WebSessionControl.start() -> None
```

```python
nemo_gym.web.session_control.WebSessionControl.stop(
    timeout: float
) -> None
```

async

```python
class nemo_gym.web.session_control._SessionRequest(
    token_digest: bytes,
    created_at: float,
    fingerprint: str | None = None,
    seed: asyncio.Task[nemo_gym.web.api_models.WebSeedSessionResponse] | None = None,
    close: asyncio.Task[bool] | None = None,
    closing: bool = False,
    closed_at: float | None = None,
    expiry_close_attempts: int = 0
)
```

Dataclass

**`close`** `Task[bool] | None = None`

---

**`closed_at`** `float | None = None`

---

**`closing`** `bool = False`

---

**`created_at`** `float`

---

**`expiry_close_attempts`** `int = 0`

---

**`fingerprint`** `str | None = None`

---

**`seed`** `Task[WebSeedSessionResponse] | None = None`

---

**`token_digest`** `bytes`

---

```python
nemo_gym.web.session_control.LOG = logging.getLogger(__name__)
```