Skip to content

Commit 53dccaf

Browse files
feat: expose Data Designer run config (#203)
1 parent 55b4ce1 commit 53dccaf

3 files changed

Lines changed: 42 additions & 0 deletions

File tree

src/anonymizer/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
__version__ = version("nemo-anonymizer")
1010

1111
from data_designer.config.models import ModelProvider as ModelProvider
12+
from data_designer.config.run_config import RunConfig as RunConfig
1213

1314
from anonymizer.config.anonymizer_config import (
1415
AnonymizerConfig,
@@ -64,6 +65,7 @@ def __getattr__(name: str) -> object:
6465
"Redact",
6566
"Rewrite",
6667
"RiskTolerance",
68+
"RunConfig",
6769
"Substitute",
6870
"configure_logging",
6971
]

src/anonymizer/interface/anonymizer.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from typing import TYPE_CHECKING
1414

1515
from data_designer.config.models import ModelProvider
16+
from data_designer.config.run_config import RunConfig
1617
from data_designer.config.utils.io_helpers import load_config_file
1718
from data_designer.interface.data_designer import DataDesigner
1819

@@ -109,6 +110,7 @@ def __init__(
109110
model_providers: list[ModelProvider] | str | Path | None = None,
110111
artifact_path: str | Path | None = None,
111112
data_designer: DataDesigner | None = None,
113+
data_designer_run_config: RunConfig | None = None,
112114
detection_workflow: EntityDetectionWorkflow | None = None,
113115
replace_runner: ReplacementWorkflow | None = None,
114116
rewrite_runner: RewriteWorkflow | None = None,
@@ -125,6 +127,10 @@ def __init__(
125127
artifact_path: Directory for intermediate artifacts. Defaults to
126128
``.anonymizer-artifacts``.
127129
data_designer: Pre-configured DataDesigner instance (advanced usage).
130+
data_designer_run_config: Optional DataDesigner run configuration
131+
applied to the Anonymizer-managed or caller-supplied DataDesigner
132+
instance. Use this for DataDesigner execution knobs such as
133+
``buffer_size`` and ``max_in_flight_tasks``.
128134
detection_workflow: Custom detection workflow (advanced/testing).
129135
replace_runner: Custom replacement workflow (advanced/testing).
130136
rewrite_runner: Custom rewrite workflow (advanced/testing).
@@ -164,6 +170,8 @@ def __init__(
164170
model_providers=self._resolved_providers,
165171
)
166172
reapply_log_levels()
173+
if data_designer_run_config is not None:
174+
self._data_designer.set_run_config(data_designer_run_config)
167175
self._adapter = NddAdapter(data_designer=self._data_designer)
168176
self._detection_workflow = detection_workflow or EntityDetectionWorkflow(adapter=self._adapter)
169177
self._replace_runner = replace_runner or ReplacementWorkflow(

tests/interface/test_anonymizer_interface.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import pytest
1212
from data_designer.config.models import ModelConfig
1313

14+
from anonymizer import RunConfig
1415
from anonymizer.config.anonymizer_config import AnonymizerConfig, AnonymizerInput, Rewrite
1516
from anonymizer.config.models import ModelSelection, ReplaceModelSelection
1617
from anonymizer.config.replace_strategies import Redact, Substitute
@@ -169,6 +170,37 @@ def test_anonymizer_custom_model_providers_override_bundled_defaults() -> None:
169170
assert passed_providers is custom_providers
170171

171172

173+
def test_anonymizer_applies_data_designer_run_config_to_managed_instance() -> None:
174+
run_config = RunConfig(buffer_size=20, max_in_flight_tasks=64)
175+
176+
with patch("anonymizer.interface.anonymizer.DataDesigner") as mock_data_designer:
177+
Anonymizer(
178+
data_designer_run_config=run_config,
179+
detection_workflow=Mock(),
180+
replace_runner=Mock(),
181+
rewrite_runner=Mock(),
182+
)
183+
184+
mock_data_designer.return_value.set_run_config.assert_called_once_with(run_config)
185+
186+
187+
def test_anonymizer_applies_data_designer_run_config_to_supplied_instance() -> None:
188+
from data_designer.interface.data_designer import DataDesigner
189+
190+
data_designer = Mock(spec=DataDesigner)
191+
run_config = RunConfig(buffer_size=20, max_in_flight_tasks=64)
192+
193+
Anonymizer(
194+
data_designer=data_designer,
195+
data_designer_run_config=run_config,
196+
detection_workflow=Mock(),
197+
replace_runner=Mock(),
198+
rewrite_runner=Mock(),
199+
)
200+
201+
data_designer.set_run_config.assert_called_once_with(run_config)
202+
203+
172204
def test_anonymizer_rejects_missing_provider_as_invalid_config_error() -> None:
173205
yaml_str = """
174206
model_configs:

0 commit comments

Comments
 (0)