code: def test_project_images_and_metric_info_api(self, qparams):
      client = self.client
      response = client.get("/api/projects/params", params=qparams)
      self.assertEqual(200, response.status_code)
      data = response.json()
  
      self.assertIn("metric", data)
      self.assertIn("images", data)
  
      self.assertTrue(
          {"metric1", "metric2"}.issubset(set(data["metric"].keys()))
      )
      self.assertTrue(
          {"images1", "images2"}.issubset(set(data["images"].keys()))
      )
  
      self.assertEqual(1, len(data["metric"]["metric1"]))
      self.assertDictEqual({"a": 1}, data["metric"]["metric1"][0])
  
      self.assertEqual(2, len(data["images"]["images1"]))
  
      self.assertEqual(1, len(data["metric"]["metric2"]))
      self.assertDictEqual({"a": 1}, data["metric"]["metric2"][0])
  
      self.assertEqual(1, len(data["images"]["images2"]))
      self.assertDictEqual({"b": 1}, data["images"]["images2"][0])
  
file_path: aim/tests/api/test_project_api.py
imports: import pytz
  from tests.base import PrefilledDataApiTestBase, ApiTestBase
  from tests.utils import generate_image_set
  from parameterized import parameterized
  import datetime
  from aim.sdk.run import Run
label_desc: Use image node_id 2 for calling the TestProjectParamsWithImagesApi obj's underlying member method code with example usage: obj.test_project_images_and_metric_info_api(qparams) without return types