Skip to content

Commit f78ffa8

Browse files
committed
Fix CI
Signed-off-by: Jash Gulabrai <jgulabrai@nvidia.com>
1 parent 9addf61 commit f78ffa8

3 files changed

Lines changed: 25 additions & 13 deletions

File tree

.github/workflows/ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1177,7 +1177,7 @@ jobs:
11771177
# is defensive in case that ever stops being true (e.g. an artifact
11781178
# ever leaks in from a previous workflow attempt).
11791179
run: |
1180-
RUN_DIR=$(ls -td plugins/nemo-guardrails/benchmarks/artifacts/runs/*/ | head -1)
1180+
RUN_DIR=$(find plugins/nemo-guardrails/benchmarks/artifacts/runs -mindepth 1 -maxdepth 1 -type d -printf '%T@ %p\n' | sort -nr | head -1 | cut -d' ' -f2-)
11811181
echo "Analyzing run directory: $RUN_DIR"
11821182
uv run --frozen --package nemo-guardrails-plugin --extra bench \
11831183
python -m nemo_guardrails_plugin.benchmarks.analyze "$RUN_DIR"

plugins/nemo-guardrails/src/nemo_guardrails_plugin/benchmarks/analyze.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -243,10 +243,7 @@ def main(argv: list[str] | None = None) -> int:
243243
parser.add_argument(
244244
"run_dir",
245245
type=Path,
246-
help=(
247-
"Path to a run directory under "
248-
"`plugins/nemo-guardrails/benchmarks/artifacts/runs/<timestamp>/`."
249-
),
246+
help=("Path to a run directory under `plugins/nemo-guardrails/benchmarks/artifacts/runs/<timestamp>/`."),
250247
)
251248
parser.add_argument(
252249
"--log-level",

plugins/nemo-guardrails/tests/unit/benchmarks/test_seeding.py

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
CS_MODEL_NAME,
1515
CS_PROVIDER,
1616
GUARDRAIL_CONFIG,
17+
NO_GUARDRAILS_VM_NAME,
1718
VM_NAME,
1819
WORKSPACE,
1920
)
@@ -145,21 +146,33 @@ def test_calls_sdk_with_expected_payloads(self, fake_client: MagicMock, tmp_path
145146
cs_entity = seeded.cs_model_entity
146147
assert gc_call.kwargs["data"]["models"][0]["model"] == cs_entity
147148

148-
# VirtualModel uses the discovered app entity and points middleware at the
149-
# guardrail config we just created.
150-
vm_call = fake_client.inference.virtual_models.create.call_args
151-
assert vm_call.kwargs["name"] == VM_NAME
152-
assert vm_call.kwargs["default_model_entity"] == seeded.app_model_entity
153-
assert vm_call.kwargs["models"] == [{"model": seeded.app_model_entity, "backend_format": "OPENAI_CHAT"}]
149+
# Two VirtualModels are created: the guardrails VM (with middleware) and
150+
# a control VM (no middleware) used by the without-guardrails benchmark
151+
# variant.
152+
vm_calls = fake_client.inference.virtual_models.create.call_args_list
153+
assert len(vm_calls) == 2
154+
155+
guardrails_vm_call = vm_calls[0]
156+
assert guardrails_vm_call.kwargs["name"] == VM_NAME
157+
assert guardrails_vm_call.kwargs["default_model_entity"] == seeded.app_model_entity
158+
assert guardrails_vm_call.kwargs["models"] == [
159+
{"model": seeded.app_model_entity, "backend_format": "OPENAI_CHAT"}
160+
]
154161
expected_middleware = [
155162
{
156163
"name": "nemo-guardrails",
157164
"config_type": "guardrail_config",
158165
"config_id": f"{WORKSPACE}/{GUARDRAIL_CONFIG}",
159166
}
160167
]
161-
assert vm_call.kwargs["request_middleware"] == expected_middleware
162-
assert vm_call.kwargs["response_middleware"] == expected_middleware
168+
assert guardrails_vm_call.kwargs["request_middleware"] == expected_middleware
169+
assert guardrails_vm_call.kwargs["response_middleware"] == expected_middleware
170+
171+
control_vm_call = vm_calls[1]
172+
assert control_vm_call.kwargs["name"] == NO_GUARDRAILS_VM_NAME
173+
assert control_vm_call.kwargs["default_model_entity"] == seeded.app_model_entity
174+
assert control_vm_call.kwargs["request_middleware"] == []
175+
assert control_vm_call.kwargs["response_middleware"] == []
163176

164177
def test_generated_dir_contains_artifacts(self, fake_client: MagicMock, tmp_path: Path) -> None:
165178
ng_root = tmp_path / "NeMo-Guardrails"
@@ -176,6 +189,7 @@ def test_generated_dir_contains_artifacts(self, fake_client: MagicMock, tmp_path
176189
assert (generated_dir / "app_provider.json").is_file()
177190
assert (generated_dir / "content_safety_provider.json").is_file()
178191
assert (generated_dir / "virtual_model.json").is_file()
192+
assert (generated_dir / "virtual_model_no_guardrails.json").is_file()
179193

180194
request_payload = json.loads(
181195
(generated_dir / "content_safety_local_nmp_request.json").read_text(encoding="utf-8")
@@ -197,6 +211,7 @@ def test_returns_seeded_resources(self, fake_client: MagicMock, tmp_path: Path)
197211

198212
assert seeded.workspace == WORKSPACE
199213
assert seeded.vm_ref == f"{WORKSPACE}/{VM_NAME}"
214+
assert seeded.no_guardrails_vm_name == NO_GUARDRAILS_VM_NAME
200215
assert seeded.guardrail_config_ref == f"{WORKSPACE}/{GUARDRAIL_CONFIG}"
201216

202217
def test_raises_if_served_models_never_populated(self, tmp_path: Path) -> None:

0 commit comments

Comments
 (0)