mirror of
https://gitee.com/blackfox/geekai.git
synced 2025-12-08 01:38:23 +08:00
Merge branch 'v4.2.1' of https://gitee.com/blackfox/geekai-plus into v4.2.1
This commit is contained in:
commit
4dcb0d850c
@ -150,7 +150,7 @@ type SystemConfig struct {
|
|||||||
DallPower int `json:"dall_power,omitempty"` // DALL-E-3 绘图消耗算力
|
DallPower int `json:"dall_power,omitempty"` // DALL-E-3 绘图消耗算力
|
||||||
SunoPower int `json:"suno_power,omitempty"` // Suno 生成歌曲消耗算力
|
SunoPower int `json:"suno_power,omitempty"` // Suno 生成歌曲消耗算力
|
||||||
LumaPower int `json:"luma_power,omitempty"` // Luma 生成视频消耗算力
|
LumaPower int `json:"luma_power,omitempty"` // Luma 生成视频消耗算力
|
||||||
KeLingPower int `json:"keling_power,omitempty"` // 可灵生成视频消耗算力
|
KeLingPowers map[string]int `json:"keling_powers,omitempty"` // 可灵生成视频消耗算力
|
||||||
AdvanceVoicePower int `json:"advance_voice_power,omitempty"` // 高级语音对话消耗算力
|
AdvanceVoicePower int `json:"advance_voice_power,omitempty"` // 高级语音对话消耗算力
|
||||||
PromptPower int `json:"prompt_power,omitempty"` // 生成提示词消耗算力
|
PromptPower int `json:"prompt_power,omitempty"` // 生成提示词消耗算力
|
||||||
|
|
||||||
@ -171,6 +171,5 @@ type SystemConfig struct {
|
|||||||
EmailWhiteList []string `json:"email_white_list"` // 邮箱白名单列表
|
EmailWhiteList []string `json:"email_white_list"` // 邮箱白名单列表
|
||||||
TranslateModelId int `json:"translate_model_id"` // 用来做提示词翻译的大模型 id
|
TranslateModelId int `json:"translate_model_id"` // 用来做提示词翻译的大模型 id
|
||||||
MaxFileSize int `json:"max_file_size"` // 最大文件大小,单位:MB
|
MaxFileSize int `json:"max_file_size"` // 最大文件大小,单位:MB
|
||||||
License string `json:"license"` // License
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -91,7 +91,8 @@ type SunoTask struct {
|
|||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
RefTaskId string `json:"ref_task_id,omitempty"`
|
RefTaskId string `json:"ref_task_id,omitempty"`
|
||||||
RefSongId string `json:"ref_song_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"`
|
Tags string `json:"tags"`
|
||||||
Model string `json:"model"`
|
Model string `json:"model"`
|
||||||
Instrumental bool `json:"instrumental"` // 是否纯音乐
|
Instrumental bool `json:"instrumental"` // 是否纯音乐
|
||||||
|
|||||||
@ -48,6 +48,7 @@ func (h *ConfigHandler) Update(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := c.ShouldBindJSON(&data); err != nil {
|
if err := c.ShouldBindJSON(&data); err != nil {
|
||||||
|
logger.Errorf("Update config failed: %v", err)
|
||||||
resp.ERROR(c, types.InvalidArgs)
|
resp.ERROR(c, types.InvalidArgs)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -131,14 +132,6 @@ func (h *ConfigHandler) Active(c *gin.Context) {
|
|||||||
resp.ERROR(c, err.Error())
|
resp.ERROR(c, err.Error())
|
||||||
return
|
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)
|
resp.SUCCESS(c)
|
||||||
|
|
||||||
@ -153,7 +146,6 @@ func (h *ConfigHandler) GetLicense(c *gin.Context) {
|
|||||||
// FixData 修复数据
|
// FixData 修复数据
|
||||||
func (h *ConfigHandler) FixData(c *gin.Context) {
|
func (h *ConfigHandler) FixData(c *gin.Context) {
|
||||||
resp.ERROR(c, "当前升级版本没有数据需要修正!")
|
resp.ERROR(c, "当前升级版本没有数据需要修正!")
|
||||||
return
|
|
||||||
//var fixed bool
|
//var fixed bool
|
||||||
//version := "data_fix_4.1.4"
|
//version := "data_fix_4.1.4"
|
||||||
//err := h.levelDB.Get(version, &fixed)
|
//err := h.levelDB.Get(version, &fixed)
|
||||||
|
|||||||
@ -18,9 +18,10 @@ import (
|
|||||||
"geekai/store/vo"
|
"geekai/store/vo"
|
||||||
"geekai/utils"
|
"geekai/utils"
|
||||||
"geekai/utils/resp"
|
"geekai/utils/resp"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type SunoHandler struct {
|
type SunoHandler struct {
|
||||||
@ -96,6 +97,7 @@ func (h *SunoHandler) Create(c *gin.Context) {
|
|||||||
RefSongId: data.RefSongId,
|
RefSongId: data.RefSongId,
|
||||||
ExtendSecs: data.ExtendSecs,
|
ExtendSecs: data.ExtendSecs,
|
||||||
Prompt: data.Prompt,
|
Prompt: data.Prompt,
|
||||||
|
Lyrics: data.Lyrics,
|
||||||
Tags: data.Tags,
|
Tags: data.Tags,
|
||||||
Model: data.Model,
|
Model: data.Model,
|
||||||
Instrumental: data.Instrumental,
|
Instrumental: data.Instrumental,
|
||||||
|
|||||||
@ -281,6 +281,8 @@ func (h *VideoHandler) Remove(c *gin.Context) {
|
|||||||
// 删除文件
|
// 删除文件
|
||||||
_ = h.uploader.GetUploadHandler().Delete(job.CoverURL)
|
_ = h.uploader.GetUploadHandler().Delete(job.CoverURL)
|
||||||
_ = h.uploader.GetUploadHandler().Delete(job.VideoURL)
|
_ = h.uploader.GetUploadHandler().Delete(job.VideoURL)
|
||||||
|
|
||||||
|
resp.SUCCESS(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *VideoHandler) Publish(c *gin.Context) {
|
func (h *VideoHandler) Publish(c *gin.Context) {
|
||||||
|
|||||||
@ -13,9 +13,6 @@ import (
|
|||||||
"geekai/core"
|
"geekai/core"
|
||||||
"geekai/core/types"
|
"geekai/core/types"
|
||||||
"geekai/store"
|
"geekai/store"
|
||||||
"geekai/store/model"
|
|
||||||
"geekai/utils"
|
|
||||||
"gorm.io/gorm"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -25,27 +22,17 @@ import (
|
|||||||
|
|
||||||
type LicenseService struct {
|
type LicenseService struct {
|
||||||
config types.ApiConfig
|
config types.ApiConfig
|
||||||
db *gorm.DB
|
|
||||||
levelDB *store.LevelDB
|
levelDB *store.LevelDB
|
||||||
license *types.License
|
license *types.License
|
||||||
urlWhiteList []string
|
urlWhiteList []string
|
||||||
machineId 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 license types.License
|
||||||
var machineId string
|
var machineId string
|
||||||
err := levelDB.Get(types.LicenseKey, &license)
|
err := levelDB.Get(types.LicenseKey, &license)
|
||||||
logger.Infof("License: %+v", server.SysConfig)
|
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()
|
info, err := host.Info()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
machineId = info.HostID
|
machineId = info.HostID
|
||||||
|
|||||||
@ -134,7 +134,7 @@ func (s *Service) Create(task types.SunoTask) (RespVo, error) {
|
|||||||
if task.Type == 1 {
|
if task.Type == 1 {
|
||||||
reqBody["gpt_description_prompt"] = task.Prompt
|
reqBody["gpt_description_prompt"] = task.Prompt
|
||||||
} else { // 自定义模式
|
} else { // 自定义模式
|
||||||
reqBody["prompt"] = task.Prompt
|
reqBody["prompt"] = task.Lyrics
|
||||||
reqBody["tags"] = task.Tags
|
reqBody["tags"] = task.Tags
|
||||||
reqBody["mv"] = task.Model
|
reqBody["mv"] = task.Model
|
||||||
reqBody["title"] = task.Title
|
reqBody["title"] = task.Title
|
||||||
|
|||||||
@ -44,20 +44,41 @@ const ImagePromptOptimizeTemplate = `
|
|||||||
const LyricPromptTemplate = `
|
const LyricPromptTemplate = `
|
||||||
你是一位才华横溢的作曲家,拥有丰富的情感和细腻的笔触,你对文字有着独特的感悟力,能将各种情感和意境巧妙地融入歌词中。
|
你是一位才华横溢的作曲家,拥有丰富的情感和细腻的笔触,你对文字有着独特的感悟力,能将各种情感和意境巧妙地融入歌词中。
|
||||||
请以【%s】为主题创作一首歌曲,歌曲时间不要太短,3分钟左右,不要输出任何解释性的内容。
|
请以【%s】为主题创作一首歌曲,歌曲时间不要太短,3分钟左右,不要输出任何解释性的内容。
|
||||||
输出格式如下:
|
下面是一个标准的歌词输出模板:
|
||||||
歌曲名称
|
歌曲名称
|
||||||
第一节:
|
|
||||||
{{歌词内容}}
|
|
||||||
副歌:
|
|
||||||
{{歌词内容}}
|
|
||||||
|
|
||||||
第二节:
|
[Verse]
|
||||||
{{歌词内容}}
|
[歌词]
|
||||||
副歌:
|
|
||||||
{{歌词内容}}
|
|
||||||
|
|
||||||
尾声:
|
[Verse 2]
|
||||||
{{歌词内容}}
|
[歌词]
|
||||||
|
|
||||||
|
[Chorus]
|
||||||
|
[歌词]
|
||||||
|
|
||||||
|
[Verse 3]
|
||||||
|
[歌词]
|
||||||
|
|
||||||
|
[Bridge]
|
||||||
|
[歌词]
|
||||||
|
|
||||||
|
[Chorus]
|
||||||
|
[歌词]
|
||||||
|
|
||||||
|
[Verse 4]
|
||||||
|
[歌词]
|
||||||
|
|
||||||
|
[Bridge]
|
||||||
|
假如此刻眼泪能倒流
|
||||||
|
让我学会微笑不掩忧
|
||||||
|
一次次的碎片堆积的愁
|
||||||
|
最终也会开成希望的秋
|
||||||
|
|
||||||
|
[Chorus]
|
||||||
|
假如我还能牵你的手
|
||||||
|
天空也许会更蔚蓝悠游
|
||||||
|
曾经那些未完成的错过
|
||||||
|
愿能变成今天的收获
|
||||||
`
|
`
|
||||||
|
|
||||||
const VideoPromptTemplate = `## 任务描述
|
const VideoPromptTemplate = `## 任务描述
|
||||||
|
|||||||
@ -519,7 +519,7 @@ func (s *Service) KeLingCreate(task types.VideoTask) (KeLingRespVo, error) {
|
|||||||
|
|
||||||
// 2. 构建API请求参数
|
// 2. 构建API请求参数
|
||||||
payload := map[string]interface{}{
|
payload := map[string]interface{}{
|
||||||
"model": params.Model,
|
"model_name": params.Model,
|
||||||
"prompt": task.Prompt,
|
"prompt": task.Prompt,
|
||||||
"negative_prompt": params.NegPrompt,
|
"negative_prompt": params.NegPrompt,
|
||||||
"cfg_scale": params.CfgScale,
|
"cfg_scale": params.CfgScale,
|
||||||
|
|||||||
@ -243,8 +243,24 @@
|
|||||||
<el-form-item label="Luma 算力" prop="luma_power">
|
<el-form-item label="Luma 算力" prop="luma_power">
|
||||||
<el-input v-model.number="system['luma_power']" placeholder="使用 Luma 生成一段视频消耗算力" />
|
<el-input v-model.number="system['luma_power']" placeholder="使用 Luma 生成一段视频消耗算力" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="可灵算力" prop="keling_power">
|
<el-form-item>
|
||||||
<el-input v-model.number="system['keling_power']" placeholder="使用快手可灵生成一段视频消耗算力" />
|
<template #label>
|
||||||
|
<div class="label-title">
|
||||||
|
可灵算力
|
||||||
|
<el-tooltip effect="dark" content="可灵每个模型价格不一样,具体请参考:https://api.geekai.pro/models" raw-content placement="right">
|
||||||
|
<el-icon>
|
||||||
|
<InfoFilled />
|
||||||
|
</el-icon>
|
||||||
|
</el-tooltip>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<el-row :gutter="20" v-if="system['keling_powers']">
|
||||||
|
<el-col :span="6" v-for="[key] in Object.entries(system['keling_powers'])" :key="key">
|
||||||
|
<el-form-item :label="key" label-position="left">
|
||||||
|
<el-input v-model.number="system['keling_powers'][key]" size="small" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<template #label>
|
<template #label>
|
||||||
@ -412,6 +428,20 @@ onMounted(() => {
|
|||||||
httpGet("/api/admin/config/get?key=system")
|
httpGet("/api/admin/config/get?key=system")
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
system.value = res.data;
|
system.value = res.data;
|
||||||
|
system.value.keling_powers = system.value.keling_powers || {
|
||||||
|
"kling-v1-6_std_5": 240,
|
||||||
|
"kling-v1-6_std_10": 480,
|
||||||
|
"kling-v1-6_pro_5": 420,
|
||||||
|
"kling-v1-6_pro_10": 840,
|
||||||
|
"kling-v1-5_std_5": 240,
|
||||||
|
"kling-v1-5_std_10": 480,
|
||||||
|
"kling-v1-5_pro_5": 420,
|
||||||
|
"kling-v1-5_pro_10": 840,
|
||||||
|
"kling-v1_std_5": 120,
|
||||||
|
"kling-v1_std_10": 240,
|
||||||
|
"kling-v1_pro_5": 420,
|
||||||
|
"kling-v1_pro_10": 840,
|
||||||
|
};
|
||||||
configBak.value = copyObj(system.value);
|
configBak.value = copyObj(system.value);
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user