content: package org.ruoyi.common.chat.entity.fineTune;
  
  import com.fasterxml.jackson.annotation.JsonInclude;
  import com.fasterxml.jackson.annotation.JsonProperty;
  import lombok.*;
  import lombok.extern.slf4j.Slf4j;
  import org.ruoyi.common.chat.openai.exception.CommonError;
  import org.ruoyi.common.core.exception.base.BaseException;
  
  import java.io.Serializable;
  import java.util.List;
  import java.util.Objects;
  
  @Getter
  @Slf4j
  @Builder
  @JsonInclude(JsonInclude.Include.NON_NULL)
  @NoArgsConstructor
  @AllArgsConstructor
  public class FineTune implements Serializable {
  
      /**
       * 上传的文件ID
       */
      @NonNull
      @JsonProperty("training_file")
      private String trainingFile;
  
      @JsonProperty("validation_file")
      private String validationFile;
      /**
       * 参考
       * @see Model
       */
      private String model;
  
      @JsonProperty("n_epochs")
      @Builder.Default
      private Integer n_epochs = 4;
  
      @JsonProperty("batch_size")
      private Integer batchSize;
  
      @JsonProperty("learning_rate_multiplier")
      private Double learningRateMultiplier;
  
      @JsonProperty("prompt_loss_weight")
      @Builder.Default
      private Double promptLossWeight = 0.01;
  
      @JsonProperty("compute_classification_metrics")
      @Builder.Default
      private boolean computeClassificationMetrics = false;
  
      @JsonProperty("classification_n_classes")
      private Integer classificationNClasses;
  
      @JsonProperty("classification_betas")
      private List classificationBetas;
  
      private String suffix;
  
      public void setTrainingFile(String trainingFile) {
          this.trainingFile = trainingFile;
      }
  
      public void setValidationFile(String validationFile) {
          this.validationFile = validationFile;
      }
  
      public void setModel(String model) {
          this.model = model;
      }
  
      public void setN_epochs(Integer n_epochs) {
          this.n_epochs = n_epochs;
      }
  
      public void setBatchSize(Integer batchSize) {
          this.batchSize = batchSize;
      }
  
      public void setLearningRateMultiplier(Double learningRateMultiplier) {
          this.learningRateMultiplier = learningRateMultiplier;
      }
  
      public void setPromptLossWeight(Double promptLossWeight) {
          this.promptLossWeight = promptLossWeight;
      }
  
      public void setComputeClassificationMetrics(boolean computeClassificationMetrics) {
          this.computeClassificationMetrics = computeClassificationMetrics;
      }
  
      public void setClassificationNClasses(Integer classificationNClasses) {
          this.classificationNClasses = classificationNClasses;
      }
  
      public void setClassificationBetas(List classificationBetas) {
          this.classificationBetas = classificationBetas;
      }
  
      public void setSuffix(String suffix) {
          if(Objects.nonNull(suffix) && !"".equals(suffix) && suffix.length() > 40){
              log.error("后缀长度不能大于40");
              throw new BaseException(CommonError.PARAM_ERROR.msg());
          }
          this.suffix = suffix;
      }
  
      @Getter
      @AllArgsConstructor
      public enum Model {
          // or a fine-tuned model created after 2022-04-21.
          ADA("ada"),
          BABBAGE("babbage"),
          CURIE("curie"),
          DAVINCI("davinci"),
          ;
          private String name;
      }
  }
  