  
          message = f"Total Iterations: {int(loss[0][0])} | "
          message += "  ".join([f"{itm[1]}: {itm[2]}" for itm in loss])
          if not message:
              logger.trace("Error creating loss message. Returning False")
              return False
  
          iterations = self.train_stats["iterations"]
  
          if iterations == 0:
 
</s> remove             logger.trace("Not loss message. Returning False")
 </s> add             logger.trace("Not loss message. Returning False")  # type:ignore[attr-defined] </s> remove         loss = self.consoleregex["loss"].findall(string)
 </s> add         loss = self._consoleregex["loss"].findall(string) </s> remove         iterations = self.train_stats["iterations"]
 </s> add         iterations = self._train_stats["iterations"]
        assert isinstance(iterations, int) </s> remove             logger.trace("Error creating ffmpeg message. Returning False")
 </s> add             logger.trace(  # type:ignore[attr-defined]
                "Error creating ffmpeg message. Returning False") </s> remove         self.train_stats["iterations"] = iterations
 </s> add         self._train_stats["iterations"] = iterations
            logger.trace(  # type:ignore[attr-defined]
                "Error creating loss message. Returning False")
  
          message = f"Total Iterations: {int(loss[0][0])} | "
          message += "  ".join([f"{itm[1]}: {itm[2]}" for itm in loss])
          if not message:
            logger.trace(  # type:ignore[attr-defined]
                "Error creating loss message. Returning False")
              return False
  
          iterations = self.train_stats["iterations"]
  
          if iterations == 0:
keep keep keep keep replace keep keep keep keep keep
 bugfix: GUI force stdout/stderr reading to utf-8 
lib/gui/wrapper.py