code: def EvalAdjustingSchedule(history,
                            constant=0.1,
                            steps_to_decrease=20,
                            improvement_margin=0.001,
                            decrease_rate=1.5,
                            history_mode="eval",
                            metric="metrics/accuracy"):
    
    metrics = history.get(history_mode, metric)
    adjusted = constant
    if len(metrics) < 2:
      return MultifactorSchedule(history, constant=adjusted)
  
    steps_without_improvement = 0
    cur = metrics.pop()[1]  # The most-recent value of the metric.
    while len(metrics) > 1:
      # The one-before value of metrics as .pop() removes one element each time.
      prev = metrics.pop()[1]
      if cur < prev * (1 + improvement_margin):
        steps_without_improvement += 1
      else:
        cur = prev
        steps_without_improvement = 0
      if steps_without_improvement >= steps_to_decrease:
        adjusted /= decrease_rate
        cur = prev
        steps_without_improvement = 0
  
    return MultifactorSchedule(history, constant=adjusted)
docs: Learning rate that decreases when eval metric stalls.
  
    If the chosen metric does not improve by improvement_margin for as many as
    steps_to_decrease steps, then the constant gets decreased by decrease rate.
    Finally, the MultifactorSchedule gets called with the adjusted constant.
  
    Args:
      history: trax.history.History, the history of training and evaluation.
      constant: float, the starting constant for the learning rate schedule.
      steps_to_decrease: int, after how many steps without improvement
        should we decrease the constant.
      improvement_margin: how much we need to improve to consider the metric
        improved.
      decrease_rate: by what fraction to decrease (i.e. lr /= decrease_rate).
      history_mode: str, which mode of the history to use.
      metric: which evaluation metric to use for adjustments.
  
    Returns:
      a function learning_rate(step): float -> float, the step-dependent lr.