input: 
  def distinguish_between_cats_and_dogs(dataset_path: str, input_shape: tuple, num_classes: int) -> keras.models.Sequential:
      """ Build a machine learning model using Keras that distinguishes between cats and dogs.
      The function takes the path to the dataset, the input shape of the images, and the number of classes (cats and dogs) as inputs.
      It returns a compiled Keras model ready to be trained.
      Example:
      for distinguish_between_cats_and_dogs('/path/to/dataset', (64, 64, 3), 2)
      the return value is a compiled Keras model.
      """
      model = Sequential()
      model.add(Conv2D(32, (3, 3), input_shape=input_shape, activation='relu'))
      model.add(MaxPooling2D(pool_size=(2, 2)))
      model.add(Dropout(0.3))
      model.add(Conv2D(64, (3, 3), activation='relu'))
      model.add(MaxPooling2D(pool_size=(2, 2)))
      model.add(Dropout(0.3))
      model.add(Conv2D(64, (3, 3), activation='relu'))
      model.add(MaxPooling2D(pool_size=(2, 2)))
      model.add(Dropout(0.3))
      model.add(Flatten())
      model.add(Dense(units=128, activation='relu'))
      model.add(Dense(units=num_classes, activation='sigmoid'))
      model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
      return model
  
output:     
      model = Sequential()
      model.add(Conv2D(32, (3, 3), input_shape=input_shape, activation='relu'))
      model.add(MaxPooling2D(pool_size=(2, 2)))
      model.add(Dropout(0.3))
      model.add(Conv2D(64, (3, 3), activation='relu'))
      model.add(MaxPooling2D(pool_size=(2, 2)))
      model.add(Dropout(0.3))
      model.add(Conv2D(64, (3, 3), activation='relu'))
      model.add(MaxPooling2D(pool_size=(2, 2)))
      model.add(Dropout(0.3))
      model.add(Flatten())
      model.add(Dense(units=128, activation='relu'))
      model.add(Dense(units=num_classes, activation='sigmoid'))
      model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
      return model
  