class_docstr: Tests are in order with the design doc.
code: def test_tools(self):
      tools = dict(
          function_declarations=[
              dict(
                  name="datetime",
                  description="Returns the current UTC date and time.",
              )
          ]
      )
      model = generative_models.GenerativeModel(
          "gemini-mm-m", tools=tools
      )
  
      self.responses["generate_content"] = [
          simple_response("a"),
          simple_response("b"),
      ]
  
      response = model.generate_content("Hello")
  
      chat = model.start_chat()
      response = chat.send_message("Hello")
  
      expect_tools = dict(
          function_declarations=[
              dict(
                  name="datetime",
                  description="Returns the current UTC date and time.",
              )
          ]
      )
  
      for obr in self.observed_requests:
          self.assertLen(obr.tools, 1)
          self.assertEqual(
              type(obr.tools[0]).to_dict(obr.tools[0]), tools
          )
  
imports: import collections
  from collections.abc import Iterable
  import copy
  import pathlib
  import unittest.mock
  from absl.testing import absltest
  from absl.testing import parameterized
  import google.ai.generativelanguage
  from google.generativeai import client
  from google.generativeai import generative_models
  from google.generativeai.types import content_types
  from google.generativeai.types import generation_types
  import PIL.Image
label_desc: Use image node_id 21 for calling the CUJTests obj's underlying member method code with example usage: obj.test_tools() without return types