code: def make_dataset_models(dataset, schemas_and_tables, metadata_dict = None, version: int = 1, include_contacts=False):
      
      if metadata_dict is None:
          metadata_dict={}
      validate_types(schemas_and_tables)
      dataset_dict = {}
      cell_segment_model = make_cell_segment_model(dataset, version=version)
      dataset_dict[root_model_name.lower()] = cell_segment_model
      for schema_name, table_name in schemas_and_tables:
          model_key = table_name
          metadata = metadata_dict.get(table_name, None)
          dataset_dict[model_key] = make_annotation_model(dataset,
                                                          schema_name,
                                                          table_name,
                                                          table_metadata=metadata,
                                                          version=version)
      if include_contacts:
          contact_model = make_annotation_model_from_schema(dataset,
                                                            'contact',
                                                            Contact,
                                                            version=version)
          dataset_dict['contact'] = contact_model
      return dataset_dict
docs: make all the models for a dataset
  
      Parameters
      ----------
      dataset: str
          name of dataset
      table_and_types: list[(schema_name, table_name)]
          list of tuples with types and model names to make
      metadata_dict:
          a dictionary with keys of table_names and values of metadata dicts needed
      version: str
          version number to use for making models
      include_contacts:
          option to include the model for cell contacts
  
      Returns
      -------
      dict
          dictionary where keys are table_names and values are sqlalchemy Models
  
      Raises
      ------
      UnknownAnnotationTypeException
          If a type is not a valid annotation type