17
17
import oci
18
18
import ads .aqua .deployment
19
19
import ads .config
20
- from ads .aqua .deployment import AquaDeployment , AquaDeploymentDetail , AquaDeploymentApp
20
+ from ads .aqua .deployment import (
21
+ AquaDeployment ,
22
+ AquaDeploymentDetail ,
23
+ AquaDeploymentApp ,
24
+ MDInferenceResponse ,
25
+ ModelParams ,
26
+ )
21
27
from ads .aqua .exception import AquaRuntimeError
22
28
from ads .model .datascience_model import DataScienceModel
23
29
from ads .model .deployment .model_deployment import ModelDeployment
@@ -139,6 +145,14 @@ class TestDataset:
139
145
},
140
146
}
141
147
148
+ model_params = {
149
+ "model" : "odsc-llm" ,
150
+ "max_tokens" : 500 ,
151
+ "temperature" : 0.8 ,
152
+ "top_p" : 0.8 ,
153
+ "top_k" : 10 ,
154
+ }
155
+
142
156
143
157
class TestAquaDeployment (unittest .TestCase ):
144
158
def setUp (self ):
@@ -157,6 +171,7 @@ def setUpClass(cls):
157
171
158
172
@classmethod
159
173
def tearDownClass (cls ):
174
+ cls .curr_dir = None
160
175
os .environ .pop ("CONDA_BUCKET_NS" , None )
161
176
os .environ .pop ("ODSC_MODEL_COMPARTMENT_OCID" , None )
162
177
os .environ .pop ("PROJECT_COMPARTMENT_OCID" , None )
@@ -213,10 +228,13 @@ def test_get_deployment(self, mock_get_resource_name):
213
228
)
214
229
actual_attributes = asdict (result )
215
230
assert set (expected_attributes ) == set (actual_attributes ), "Attributes mismatch"
216
- self .assertEqual (actual_attributes , TestDataset .aqua_deployment_detail )
231
+ self .assertEqual (TestDataset .aqua_deployment_detail , actual_attributes )
217
232
218
- self .assertEqual (result .log .name , "log-name" )
219
- self .assertEqual (result .log_group .name , "log-group-name" )
233
+ self .assertEqual (
234
+ "log-name" ,
235
+ result .log .name ,
236
+ )
237
+ self .assertEqual ("log-group-name" , result .log_group .name )
220
238
221
239
def test_get_deployment_missing_tags (self ):
222
240
"""Test for returning a runtime error if OCI_AQUA tag is missing."""
@@ -251,19 +269,20 @@ def test_get_deployment_config(self, mock_load_config):
251
269
252
270
self .app .get_config = MagicMock (return_value = config )
253
271
result = self .app .get_deployment_config (TestDataset .MODEL_ID )
254
- self .assertEqual (result , config )
272
+ self .assertEqual (config , result )
255
273
256
274
self .app .get_config = MagicMock (return_value = None )
257
275
mock_load_config .return_value = config
258
276
result = self .app .get_deployment_config (TestDataset .MODEL_ID )
259
- self .assertEqual (result , config )
277
+ self .assertEqual (config , result )
260
278
261
279
@patch ("ads.aqua.model.AquaModelApp.create" )
262
280
@patch ("ads.aqua.deployment.get_container_image" )
263
281
@patch ("ads.model.deployment.model_deployment.ModelDeployment.deploy" )
264
282
def test_create_deployment_for_foundation_model (
265
283
self , mock_deploy , mock_get_container_image , mock_create
266
284
):
285
+ """Test to create a deployment for foundational model"""
267
286
aqua_model = os .path .join (
268
287
self .curr_dir , "test_data/deployment/aqua_foundation_model.yaml"
269
288
)
@@ -305,16 +324,18 @@ def test_create_deployment_for_foundation_model(
305
324
expected_attributes = set (AquaDeployment .__annotations__ .keys ())
306
325
actual_attributes = asdict (result )
307
326
assert set (expected_attributes ) == set (actual_attributes ), "Attributes mismatch"
308
- expected_result = TestDataset .aqua_deployment_object
327
+ expected_result = copy . deepcopy ( TestDataset .aqua_deployment_object )
309
328
expected_result ["state" ] = "CREATING"
310
- self .assertEqual (TestDataset . aqua_deployment_object , actual_attributes )
329
+ self .assertEqual (expected_result , actual_attributes )
311
330
312
331
@patch ("ads.aqua.model.AquaModelApp.create" )
313
332
@patch ("ads.aqua.deployment.get_container_image" )
314
333
@patch ("ads.model.deployment.model_deployment.ModelDeployment.deploy" )
315
- def test_create_deployment_for_foundation_model (
334
+ def test_create_deployment_for_fine_tuned_model (
316
335
self , mock_deploy , mock_get_container_image , mock_create
317
336
):
337
+ """Test to create a deployment for fine-tuned model"""
338
+
318
339
# todo: DataScienceModel.from_yaml should update model_file_description attribute, current workaround is to
319
340
# load using with_model_file_description property.
320
341
def yaml_to_json (input_file ):
@@ -370,6 +391,40 @@ def yaml_to_json(input_file):
370
391
expected_attributes = set (AquaDeployment .__annotations__ .keys ())
371
392
actual_attributes = asdict (result )
372
393
assert set (expected_attributes ) == set (actual_attributes ), "Attributes mismatch"
373
- expected_result = TestDataset .aqua_deployment_object
394
+ expected_result = copy . deepcopy ( TestDataset .aqua_deployment_object )
374
395
expected_result ["state" ] = "CREATING"
375
- self .assertEqual (TestDataset .aqua_deployment_object , actual_attributes )
396
+ self .assertEqual (expected_result , actual_attributes )
397
+
398
+
399
+ class TestMDInferenceResponse (unittest .TestCase ):
400
+ def setUp (self ):
401
+ self .app = MDInferenceResponse ()
402
+
403
+ @classmethod
404
+ def setUpClass (cls ):
405
+ cls .curr_dir = os .path .dirname (os .path .abspath (__file__ ))
406
+
407
+ @classmethod
408
+ def tearDownClass (cls ):
409
+ cls .curr_dir = None
410
+
411
+ @patch ("requests.post" )
412
+ def test_get_model_deployment_response (self , mock_post ):
413
+ """Test to check if model deployment response is returned correctly."""
414
+
415
+ endpoint = TestDataset .MODEL_DEPLOYMENT_URL + "/predict"
416
+ self .app .prompt = "What is 1+1?"
417
+ self .app .model_params = ModelParams (** TestDataset .model_params )
418
+
419
+ mock_response = MagicMock ()
420
+ response_json = os .path .join (
421
+ self .curr_dir , "test_data/deployment/aqua_deployment_response.json"
422
+ )
423
+ with open (response_json , "r" ) as _file :
424
+ mock_response .content = _file .read ()
425
+ mock_response .status_code = 200
426
+ mock_post .return_value = mock_response
427
+
428
+ result = self .app .get_model_deployment_response (endpoint )
429
+
430
+ self .assertEqual (" The answer is 2" , result ["choices" ][0 ]["text" ])
0 commit comments