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