> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/curator/llms.txt.
> For full documentation content, see https://docs.nvidia.com/nemo/curator/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/curator/_mcp/server.

# nemo_curator.backends.xenna.adapter

## Module Contents

### Classes

| Name                                                                          | Description                                                                                 |
| ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| [`CuratorRuntimeEnv`](#nemo_curator-backends-xenna-adapter-CuratorRuntimeEnv) | Duck-typed replacement for Xenna's RuntimeEnv that supports the full Ray runtime\_env dict. |
| [`XennaStageAdapter`](#nemo_curator-backends-xenna-adapter-XennaStageAdapter) | Adapts ProcessingStage to Xenna.                                                            |

### Functions

| Name                                                                                                        | Description                                                             |
| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| [`create_named_xenna_stage_adapter`](#nemo_curator-backends-xenna-adapter-create_named_xenna_stage_adapter) | When we run a pipeline in Xenna, since we wrap using XennaStageAdapter, |

### API

```python
class nemo_curator.backends.xenna.adapter.CuratorRuntimeEnv(
    runtime_env: dict[str, typing.Any]
)
```

Duck-typed replacement for Xenna's RuntimeEnv that supports the full Ray runtime\_env dict.

Xenna's RuntimeEnv only supports conda + env\_vars. This class accepts a raw
Ray-format runtime\_env dict and implements the interface Xenna calls:
`to_ray_runtime_env()`, `format()`, and `extra_env_vars`.

```python
nemo_curator.backends.xenna.adapter.CuratorRuntimeEnv.format() -> str
```

```python
nemo_curator.backends.xenna.adapter.CuratorRuntimeEnv.to_ray_runtime_env() -> ray.runtime_env.RuntimeEnv
```

```python
class nemo_curator.backends.xenna.adapter.XennaStageAdapter(
    processing_stage: nemo_curator.stages.base.ProcessingStage
)
```

**Bases:** [BaseStageAdapter](/nemo-curator/nemo_curator/backends/base#nemo_curator-backends-base-BaseStageAdapter), `Stage`

Adapts ProcessingStage to Xenna.
Args:
stage: ProcessingStage to adapt

Runtime environment for this stage.

Converts the ProcessingStage.runtime\_env dict (Ray-format) to a
CuratorRuntimeEnv that Xenna can forward to Ray actors.

Get the resources required for this stage.

Get the batch size for this stage.

```python
nemo_curator.backends.xenna.adapter.XennaStageAdapter.process_data(
    tasks: list[nemo_curator.tasks.Task]
) -> list[nemo_curator.tasks.Task] | None
```

Process batch of tasks with automatic performance tracking.
Args:
tasks: List of tasks to process
Returns:
List of processed tasks or None

```python
nemo_curator.backends.xenna.adapter.XennaStageAdapter.setup(
    worker_metadata: cosmos_xenna.pipelines.private.resources.WorkerMetadata
) -> None
```

Setup the stage per worker - Xenna-specific signature.
This method is called by Xenna with its specific types. We convert them
to our generic types and delegate to the base adapter.
Args:
worker\_metadata: Xenna's WorkerMetadata object

```python
nemo_curator.backends.xenna.adapter.XennaStageAdapter.setup_on_node(
    node_info: cosmos_xenna.pipelines.private.resources.NodeInfo,
    worker_metadata: cosmos_xenna.pipelines.private.resources.WorkerMetadata
) -> None
```

Setup the stage on a node - Xenna-specific signature.
This method is called by Xenna with its specific types. We convert them
to our generic types and delegate to the base adapter.
Args:
node\_info: Xenna's NodeInfo object
worker\_metadata: Xenna's WorkerMetadata object

```python
nemo_curator.backends.xenna.adapter.create_named_xenna_stage_adapter(
    stage: nemo_curator.stages.base.ProcessingStage
) -> nemo_curator.backends.xenna.adapter.XennaStageAdapter
```

When we run a pipeline in Xenna, since we wrap using XennaStageAdapter,
the stage name is shown as XennaStageAdapter. This is not what we want.
So we create a dynamic subclass with the original stage's name.
This ensures that when Xenna calls type(adapter).**name**, it returns the
original stage's class name rather than 'XennaStageAdapter'.
Args:
stage (ProcessingStage): ProcessingStage to adapt

**Returns:** `XennaStageAdapter`

XennaStageAdapter instance with the wrapped stage's class name