package cn.iocoder.yudao.module.llm.dal.dataobject.finetuningtask;

import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;

/**
 * 模型调优 —— 微调任务 DO
 *
 * @author 华大大模型
 */
@TableName("llm_fine_tuning_task")
@KeySequence("llm_fine_tuning_task_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FineTuningTaskDO extends BaseDO {

    /**
     * 任务ID
     */
    @TableId
    private Long id;
    /**
     * 任务名称
     */
    private String taskName;
    /**
     * 基础模型，使用字典（llm_base_model）
     *
     * 枚举 {@link TODO llm_base_model 对应的类}
     */
    private String baseModel;
    /**
     * 训练阶段，使用字典（llm_training_stage）
     *
     * 枚举 {@link TODO llm_training_stage 对应的类}
     */
    private Integer trainStage;
    private String trainDuration;
    /**
     * 微调方法，使用字典（llm_fine_tuning_method）
     *
     * 枚举 {@link TODO llm_fine_tuning_method 对应的类}
     */
    private String method;
    /**
     * 描述
     */
    private String taskIntro;
    /**
     * GPU类型，使用字典（llm_gpu_type）
     *
     * 枚举 {@link TODO llm_gpu_type 对应的类}
     */
    private Integer gpuType;
    /**
     * GPU数量
     */
    private Integer gpuCount;
    /**
     * 数据集ID
     */
    private Long dataset;
    /**
     * 学习率
     */
    private Integer learningRate;
    /**
     * 训练轮数
     */
    private Integer epoch;
    /**
     * 截断长度
     */
    private Integer cutoffLen;
    /**
     * 批处理大小
     */
    private Integer batchSize;
    /**
     * 梯度累积
     */
    private Integer gradientAccumulation;
    /**
     * 预热步数
     */
    private Integer warmup;
    /**
     * LoRAy秩
     */
    private Integer lorayRank;
    /**
     * LoRAy缩放系数
     */
    private Integer lorayScaleFactor;
    /**
     * LoRAy随机丢弃
     */
    private Integer lorayDropout;
    /**
     * LoRAy作用模块
     */
    private String lorayModule;
    /**
     * DeepSpeed stage，使用字典（llm_deep_speed_stage）
     *
     * 枚举 {@link TODO llm_deep_speed_stage 对应的类}
     */
    private String deepSpeedStage;
    /**
     * 加速方法，使用字典（llm_acceleration_method）
     *
     * 枚举 {@link TODO llm_acceleration_method 对应的类}
     */
    private String accelerationMethod;
    /**
     * DeepSpeed offload，使用字典（infra_boolean_string）
     *
     * 枚举 {@link TODO infra_boolean_string 对应的类}
     */
    private Boolean deepSpeedOffload;
    /**
     * 保存间隔
     */
    private Integer saveInterval;
    /**
     * 状态，使用字典（llm_fine_tuning_task_status）
     *
     * 枚举 {@link TODO llm_fine_tuning_task_status 对应的类}
     */
    private Integer status;
    /**
     * 基础服务模型Id
     */
    private Long baseModelId;

    private String jobId;

    //AIGC模型名称
    private String jobModelName;

    //AIGC模型列表主键id
    private Long jobModelListId;
    // 日志文件地址
    private String trainLog;

    //检查点文件地址
    private String checkPointFilePath;

    //检查点数据内容
    private String checkPointData;


}
