package cn.iocoder.yudao.module.llm.controller.admin.finetuningtask.vo;

import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;

import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;

@Schema(description = "管理后台 - 模型调优 —— 微调任务分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class FineTuningTaskPageReqVO extends PageParam {

    @Schema(description = "任务名称", example = "李四")
    private String taskName;

    @Schema(description = "基础模型，使用字典（llm_base_model）")
    private String baseModel;

    @Schema(description = "训练阶段，使用字典（llm_training_stage）")
    private Integer trainStage;

    @Schema(description = "微调方法，使用字典（llm_fine_tuning_method）")
    private Integer method;

    @Schema(description = "描述")
    private String taskIntro;

    @Schema(description = "GPU类型，使用字典（llm_gpu_type）", example = "1")
    private Integer gpuType;

    @Schema(description = "GPU数量", example = "7626")
    private Integer gpuCount;

    @Schema(description = "数据集ID")
    private Long dataset;

    @Schema(description = "学习率")
    private Integer learningRate;

    @Schema(description = "训练轮数")
    private Integer epoch;

    @Schema(description = "截断长度")
    private Integer cutoffLen;

    @Schema(description = "批处理大小")
    private Integer batchSize;

    @Schema(description = "梯度累积")
    private Integer gradientAccumulation;

    @Schema(description = "预热步数")
    private Integer warmup;

    @Schema(description = "LoRAy秩")
    private Integer lorayRank;

    @Schema(description = "LoRAy缩放系数")
    private Integer lorayScaleFactor;

    @Schema(description = "LoRAy随机丢弃")
    private Integer lorayDropout;

    @Schema(description = "LoRAy作用模块")
    private String lorayModule;

    @Schema(description = "DeepSpeed stage，使用字典（llm_deep_speed_stage）")
    private String deepSpeedStage;

    @Schema(description = "加速方法，使用字典（llm_acceleration_method）")
    private String accelerationMethod;

    @Schema(description = "DeepSpeed offload，使用字典（infra_boolean_string）")
    private Boolean deepSpeedOffload;

    @Schema(description = "保存间隔")
    private Integer saveInterval;

    @Schema(description = "创建时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime[] createTime;

    @Schema(description = "状态，使用字典（llm_fine_tuning_task_status）", example = "1")
    private Integer status;

}