package request

// CreatePresetRequest 创建预设请求
type CreatePresetRequest struct {
	Name              string                 `json:"name" binding:"required,min=1,max=100"`
	Description       string                 `json:"description" binding:"max=500"`
	IsPublic          bool                   `json:"isPublic"`
	Temperature       float64                `json:"temperature" binding:"min=0,max=2"`
	TopP              float64                `json:"topP" binding:"min=0,max=1"`
	TopK              int                    `json:"topK" binding:"min=0"`
	FrequencyPenalty  float64                `json:"frequencyPenalty" binding:"min=-2,max=2"`
	PresencePenalty   float64                `json:"presencePenalty" binding:"min=-2,max=2"`
	MaxTokens         int                    `json:"maxTokens" binding:"min=1,max=32000"`
	RepetitionPenalty float64                `json:"repetitionPenalty"`
	MinP              float64                `json:"minP"`
	TopA              float64                `json:"topA"`
	SystemPrompt      string                 `json:"systemPrompt"`
	StopSequences     []string               `json:"stopSequences"`
	Extensions        map[string]interface{} `json:"extensions"`
}

// UpdatePresetRequest 更新预设请求
type UpdatePresetRequest struct {
	Name              string                 `json:"name" binding:"min=1,max=100"`
	Description       string                 `json:"description" binding:"max=500"`
	IsPublic          *bool                  `json:"isPublic"`
	Temperature       *float64               `json:"temperature" binding:"omitempty,min=0,max=2"`
	TopP              *float64               `json:"topP" binding:"omitempty,min=0,max=1"`
	TopK              *int                   `json:"topK" binding:"omitempty,min=0"`
	FrequencyPenalty  *float64               `json:"frequencyPenalty" binding:"omitempty,min=-2,max=2"`
	PresencePenalty   *float64               `json:"presencePenalty" binding:"omitempty,min=-2,max=2"`
	MaxTokens         *int                   `json:"maxTokens" binding:"omitempty,min=1,max=32000"`
	RepetitionPenalty *float64               `json:"repetitionPenalty"`
	MinP              *float64               `json:"minP"`
	TopA              *float64               `json:"topA"`
	SystemPrompt      *string                `json:"systemPrompt"`
	StopSequences     []string               `json:"stopSequences"`
	Extensions        map[string]interface{} `json:"extensions"`
}

// GetPresetListRequest 获取预设列表请求
type GetPresetListRequest struct {
	Page     int    `form:"page" binding:"min=1"`
	PageSize int    `form:"pageSize" binding:"min=1,max=100"`
	Keyword  string `form:"keyword"`
	IsPublic *bool  `form:"isPublic"`
}
