diff --git a/api/core/types/config.go b/api/core/types/config.go index a9c0c1cd..29169539 100644 --- a/api/core/types/config.go +++ b/api/core/types/config.go @@ -144,15 +144,15 @@ type SystemConfig struct { OrderPayTimeout int `json:"order_pay_timeout,omitempty"` //订单支付超时时间 VipInfoText string `json:"vip_info_text,omitempty"` // 会员页面充值说明 - MjPower int `json:"mj_power,omitempty"` // MJ 绘画消耗算力 - MjActionPower int `json:"mj_action_power,omitempty"` // MJ 操作(放大,变换)消耗算力 - SdPower int `json:"sd_power,omitempty"` // SD 绘画消耗算力 - DallPower int `json:"dall_power,omitempty"` // DALL-E-3 绘图消耗算力 - SunoPower int `json:"suno_power,omitempty"` // Suno 生成歌曲消耗算力 - LumaPower int `json:"luma_power,omitempty"` // Luma 生成视频消耗算力 - KeLingPower int `json:"keling_power,omitempty"` // 可灵生成视频消耗算力 - AdvanceVoicePower int `json:"advance_voice_power,omitempty"` // 高级语音对话消耗算力 - PromptPower int `json:"prompt_power,omitempty"` // 生成提示词消耗算力 + MjPower int `json:"mj_power,omitempty"` // MJ 绘画消耗算力 + MjActionPower int `json:"mj_action_power,omitempty"` // MJ 操作(放大,变换)消耗算力 + SdPower int `json:"sd_power,omitempty"` // SD 绘画消耗算力 + DallPower int `json:"dall_power,omitempty"` // DALL-E-3 绘图消耗算力 + SunoPower int `json:"suno_power,omitempty"` // Suno 生成歌曲消耗算力 + LumaPower int `json:"luma_power,omitempty"` // Luma 生成视频消耗算力 + KeLingPowers map[string]int `json:"keling_powers,omitempty"` // 可灵生成视频消耗算力 + AdvanceVoicePower int `json:"advance_voice_power,omitempty"` // 高级语音对话消耗算力 + PromptPower int `json:"prompt_power,omitempty"` // 生成提示词消耗算力 WechatCardURL string `json:"wechat_card_url,omitempty"` // 微信客服地址 @@ -171,6 +171,5 @@ type SystemConfig struct { EmailWhiteList []string `json:"email_white_list"` // 邮箱白名单列表 TranslateModelId int `json:"translate_model_id"` // 用来做提示词翻译的大模型 id MaxFileSize int `json:"max_file_size"` // 最大文件大小,单位:MB - License string `json:"license"` // License } diff --git a/api/core/types/task.go b/api/core/types/task.go index 40872c20..599482af 100644 --- a/api/core/types/task.go +++ b/api/core/types/task.go @@ -91,7 +91,8 @@ type SunoTask struct { Title string `json:"title"` RefTaskId string `json:"ref_task_id,omitempty"` RefSongId string `json:"ref_song_id,omitempty"` - Prompt string `json:"prompt"` // 提示词/歌词 + Prompt string `json:"prompt"` // 提示词 + Lyrics string `json:"lyrics,omitempty"` // 歌词 Tags string `json:"tags"` Model string `json:"model"` Instrumental bool `json:"instrumental"` // 是否纯音乐 diff --git a/api/handler/admin/config_handler.go b/api/handler/admin/config_handler.go index 8b63ef70..17166396 100644 --- a/api/handler/admin/config_handler.go +++ b/api/handler/admin/config_handler.go @@ -48,6 +48,7 @@ func (h *ConfigHandler) Update(c *gin.Context) { } if err := c.ShouldBindJSON(&data); err != nil { + logger.Errorf("Update config failed: %v", err) resp.ERROR(c, types.InvalidArgs) return } @@ -131,14 +132,6 @@ func (h *ConfigHandler) Active(c *gin.Context) { resp.ERROR(c, err.Error()) return } - h.App.SysConfig.License = data.License - - // 将 license 写入数据库 - err = h.DB.Model(&model.Config{}).Where("marker", "system").UpdateColumn("config_json", utils.JsonEncode(h.App.SysConfig)).Error - if err != nil { - resp.ERROR(c, err.Error()) - return - } resp.SUCCESS(c) @@ -153,7 +146,6 @@ func (h *ConfigHandler) GetLicense(c *gin.Context) { // FixData 修复数据 func (h *ConfigHandler) FixData(c *gin.Context) { resp.ERROR(c, "当前升级版本没有数据需要修正!") - return //var fixed bool //version := "data_fix_4.1.4" //err := h.levelDB.Get(version, &fixed) diff --git a/api/handler/suno_handler.go b/api/handler/suno_handler.go index 1ec2fa89..53ee507d 100644 --- a/api/handler/suno_handler.go +++ b/api/handler/suno_handler.go @@ -18,9 +18,10 @@ import ( "geekai/store/vo" "geekai/utils" "geekai/utils/resp" + "time" + "github.com/gin-gonic/gin" "gorm.io/gorm" - "time" ) type SunoHandler struct { @@ -96,6 +97,7 @@ func (h *SunoHandler) Create(c *gin.Context) { RefSongId: data.RefSongId, ExtendSecs: data.ExtendSecs, Prompt: data.Prompt, + Lyrics: data.Lyrics, Tags: data.Tags, Model: data.Model, Instrumental: data.Instrumental, diff --git a/api/handler/video_handler.go b/api/handler/video_handler.go index 6ea62d26..2928fb98 100644 --- a/api/handler/video_handler.go +++ b/api/handler/video_handler.go @@ -281,6 +281,8 @@ func (h *VideoHandler) Remove(c *gin.Context) { // 删除文件 _ = h.uploader.GetUploadHandler().Delete(job.CoverURL) _ = h.uploader.GetUploadHandler().Delete(job.VideoURL) + + resp.SUCCESS(c) } func (h *VideoHandler) Publish(c *gin.Context) { diff --git a/api/service/license_service.go b/api/service/license_service.go index 3469af54..5b8863cc 100644 --- a/api/service/license_service.go +++ b/api/service/license_service.go @@ -13,9 +13,6 @@ import ( "geekai/core" "geekai/core/types" "geekai/store" - "geekai/store/model" - "geekai/utils" - "gorm.io/gorm" "strings" "time" @@ -25,27 +22,17 @@ import ( type LicenseService struct { config types.ApiConfig - db *gorm.DB levelDB *store.LevelDB license *types.License urlWhiteList []string machineId string } -func NewLicenseService(server *core.AppServer, levelDB *store.LevelDB, db *gorm.DB) *LicenseService { +func NewLicenseService(server *core.AppServer, levelDB *store.LevelDB) *LicenseService { var license types.License var machineId string err := levelDB.Get(types.LicenseKey, &license) logger.Infof("License: %+v", server.SysConfig) - if err != nil { - var cfg model.Config - db.Where("marker", "system").First(&cfg) - var sysConfig types.SystemConfig - if err := utils.JsonDecode(cfg.Config, &sysConfig); err == nil { - license.Key = sysConfig.License - license.IsActive = true - } - } info, err := host.Info() if err == nil { machineId = info.HostID diff --git a/api/service/suno/service.go b/api/service/suno/service.go index 89a05efe..685153da 100644 --- a/api/service/suno/service.go +++ b/api/service/suno/service.go @@ -134,7 +134,7 @@ func (s *Service) Create(task types.SunoTask) (RespVo, error) { if task.Type == 1 { reqBody["gpt_description_prompt"] = task.Prompt } else { // 自定义模式 - reqBody["prompt"] = task.Prompt + reqBody["prompt"] = task.Lyrics reqBody["tags"] = task.Tags reqBody["mv"] = task.Model reqBody["title"] = task.Title diff --git a/api/service/types.go b/api/service/types.go index f509bf6e..9c774cbf 100644 --- a/api/service/types.go +++ b/api/service/types.go @@ -44,20 +44,41 @@ const ImagePromptOptimizeTemplate = ` const LyricPromptTemplate = ` 你是一位才华横溢的作曲家,拥有丰富的情感和细腻的笔触,你对文字有着独特的感悟力,能将各种情感和意境巧妙地融入歌词中。 请以【%s】为主题创作一首歌曲,歌曲时间不要太短,3分钟左右,不要输出任何解释性的内容。 -输出格式如下: +下面是一个标准的歌词输出模板: 歌曲名称 -第一节: -{{歌词内容}} -副歌: -{{歌词内容}} -第二节: -{{歌词内容}} -副歌: -{{歌词内容}} +[Verse] +[歌词] -尾声: -{{歌词内容}} +[Verse 2] +[歌词] + +[Chorus] +[歌词] + +[Verse 3] +[歌词] + +[Bridge] +[歌词] + +[Chorus] +[歌词] + +[Verse 4] +[歌词] + +[Bridge] +假如此刻眼泪能倒流 +让我学会微笑不掩忧 +一次次的碎片堆积的愁 +最终也会开成希望的秋 + +[Chorus] +假如我还能牵你的手 +天空也许会更蔚蓝悠游 +曾经那些未完成的错过 +愿能变成今天的收获 ` const VideoPromptTemplate = `## 任务描述 diff --git a/api/service/video/video.go b/api/service/video/video.go index 21a4d1a6..8dd91c5d 100644 --- a/api/service/video/video.go +++ b/api/service/video/video.go @@ -519,7 +519,7 @@ func (s *Service) KeLingCreate(task types.VideoTask) (KeLingRespVo, error) { // 2. 构建API请求参数 payload := map[string]interface{}{ - "model": params.Model, + "model_name": params.Model, "prompt": task.Prompt, "negative_prompt": params.NegPrompt, "cfg_scale": params.CfgScale, diff --git a/web/src/views/admin/SysConfig.vue b/web/src/views/admin/SysConfig.vue index a6df1cba..36802680 100644 --- a/web/src/views/admin/SysConfig.vue +++ b/web/src/views/admin/SysConfig.vue @@ -243,8 +243,24 @@ - - + + + + + + + + +