add stable diffusion default negtive prompt system config

This commit is contained in:
RockYang 2024-05-07 16:21:31 +08:00
parent 8a8c43c7a5
commit 6424eb871c
8 changed files with 271 additions and 237 deletions

View File

@ -175,4 +175,6 @@ type SystemConfig struct {
EnableContext bool `json:"enable_context,omitempty"` EnableContext bool `json:"enable_context,omitempty"`
ContextDeep int `json:"context_deep,omitempty"` ContextDeep int `json:"context_deep,omitempty"`
SdNegPrompt string `json:"sd_neg_prompt"` // SD 默认反向提示词
} }

View File

@ -83,7 +83,7 @@ func (h *ChatHandler) sendXunFeiMessage(
res = h.DB.Where("id", session.Model.KeyId).Where("enabled", true).Find(&apiKey) res = h.DB.Where("id", session.Model.KeyId).Where("enabled", true).Find(&apiKey)
} }
// use the last unused key // use the last unused key
if res.Error != nil { if apiKey.Id == 0 {
res = h.DB.Where("platform", session.Model.Platform).Where("type", "chat").Where("enabled", true).Order("last_used_at ASC").First(&apiKey) res = h.DB.Where("platform", session.Model.Platform).Where("type", "chat").Where("enabled", true).Order("last_used_at ASC").First(&apiKey)
} }
if res.Error != nil { if res.Error != nil {

View File

@ -48,7 +48,7 @@ func NewLicenseService(server *core.AppServer, levelDB *store.LevelDB) *LicenseS
type License struct { type License struct {
Name string `json:"name"` Name string `json:"name"`
License string `json:"license"` License string `json:"license"`
Mid string `json:"mid"` MachineId string `json:"mid"`
ActiveAt int64 `json:"active_at"` ActiveAt int64 `json:"active_at"`
ExpiredAt int64 `json:"expired_at"` ExpiredAt int64 `json:"expired_at"`
UserNum int `json:"user_num"` UserNum int `json:"user_num"`
@ -139,7 +139,7 @@ func (s *LicenseService) fetchLicense() (*types.License, error) {
return &types.License{ return &types.License{
Key: res.Data.License, Key: res.Data.License,
MachineId: res.Data.Mid, MachineId: res.Data.MachineId,
UserNum: res.Data.UserNum, UserNum: res.Data.UserNum,
ExpiredAt: res.Data.ExpiredAt, ExpiredAt: res.Data.ExpiredAt,
IsActive: true, IsActive: true,

View File

@ -58,6 +58,7 @@ func NewServicePool(db *gorm.DB, redisCli *redis.Client, manager *oss.UploaderMa
services = append(services, plusService) services = append(services, plusService)
} }
// for mid-journey proxy
for k, config := range appConfig.MjProxyConfigs { for k, config := range appConfig.MjProxyConfigs {
if config.Enabled == false { if config.Enabled == false {
continue continue

View File

@ -608,7 +608,8 @@ onMounted(() => {
}) })
httpGet("/api/config/get?key=system").then(res => { httpGet("/api/config/get?key=system").then(res => {
sdPower.value = res.data["sd_power"] sdPower.value = res.data.sd_power
params.value.neg_prompt = res.data.sd_neg_prompt
}).catch(e => { }).catch(e => {
ElMessage.error("获取系统配置失败:" + e.message) ElMessage.error("获取系统配置失败:" + e.message)
}) })

View File

@ -296,7 +296,7 @@ onUnmounted(() => {
const add = function () { const add = function () {
title.value = "新增模型" title.value = "新增模型"
showDialog.value = true showDialog.value = true
item.value = {enabled: true, weight: 1} item.value = {enabled: true, weight: 1, open: true}
} }
const edit = function (row) { const edit = function (row) {

View File

@ -1,10 +1,12 @@
<template> <template>
<div class="system-config" v-loading="loading"> <div class="system-config" v-loading="loading">
<el-tabs v-model="activeName" class="demo-tabs"> <el-tabs v-model="activeName" class="sys-tabs">
<el-tab-pane label="基本设置" name="basic"> <el-tab-pane label="系统配置" name="basic">
<div class="container"> <div class="container">
<el-form :model="system" label-width="150px" label-position="right" ref="systemFormRef" :rules="rules"> <el-form :model="system" label-width="150px" label-position="right" ref="systemFormRef" :rules="rules">
<el-tabs type="border-card">
<el-tab-pane label="基础配置">
<el-form-item label="网站标题" prop="title"> <el-form-item label="网站标题" prop="title">
<el-input v-model="system['title']"/> <el-input v-model="system['title']"/>
</el-form-item> </el-form-item>
@ -27,6 +29,111 @@
</template> </template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="开放注册" prop="enabled_register">
<el-switch v-model="system['enabled_register']"/>
<el-tooltip
effect="dark"
content="关闭注册之后只能通过管理后台添加用户"
raw-content
placement="right"
>
<el-icon>
<InfoFilled/>
</el-icon>
</el-tooltip>
</el-form-item>
<el-form-item label="注册方式" prop="register_ways">
<el-checkbox-group v-model="system['register_ways']">
<el-checkbox value="mobile">手机注册</el-checkbox>
<el-checkbox value="email">邮箱注册</el-checkbox>
<el-checkbox value="username">用户名注册</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="微信客服二维码" prop="wechat_card_url">
<el-input v-model="system['wechat_card_url']" placeholder="微信客服二维码">
<template #append>
<el-upload
:auto-upload="true"
:show-file-list="false"
@click="beforeUpload('wechat_card_url')"
:http-request="uploadImg"
>
<el-icon class="uploader-icon">
<UploadFilled/>
</el-icon>
</el-upload>
</template>
</el-input>
</el-form-item>
<el-form-item label="默认AI模型" prop="default_models">
<template #default>
<div class="tip-input">
<el-select
v-model="system['default_models']"
multiple
:filterable="true"
placeholder="选择AI模型多选"
style="width: 100%"
>
<el-option
v-for="item in models"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
<div class="info">
<el-tooltip
class="box-item"
effect="dark"
content="新用户注册默认开通的 AI 模型"
placement="right"
>
<el-icon>
<InfoFilled/>
</el-icon>
</el-tooltip>
</div>
</div>
</template>
</el-form-item>
<el-form-item label="开启聊天上下文">
<el-switch v-model="system['enable_context']"/>
</el-form-item>
<el-form-item label="会话上下文深度">
<div class="tip-input-line">
<el-input-number v-model="system['context_deep']" :min="0" :max="10"/>
<div class="tip">会话上下文深度在老会话中继续会话默认加载多少条聊天记录作为上下文如果设置为
0
则不加载聊天记录仅仅使用当前角色的上下文该配置参数最好设置需要为偶数否则将无法兼容百度的 API
</div>
</div>
</el-form-item>
<el-form-item label="SD反向提示词" prop="sd_neg_prompt">
<div class="tip-input">
<el-input v-model="system['sd_neg_prompt']" placeholder=""/>
<div class="info">
<el-tooltip
effect="dark"
content="Stable-Diffusion 绘画默认反向提示词"
raw-content
placement="right"
>
<el-icon>
<InfoFilled/>
</el-icon>
</el-tooltip>
</div>
</div>
</el-form-item>
</el-tab-pane>
<el-tab-pane label="算力配置">
<el-form-item label="注册赠送算力" prop="init_power"> <el-form-item label="注册赠送算力" prop="init_power">
<el-input v-model.number="system['init_power']" placeholder="新用户注册赠送算力"/> <el-input v-model.number="system['init_power']" placeholder="新用户注册赠送算力"/>
</el-form-item> </el-form-item>
@ -84,28 +191,8 @@
<el-form-item label="DALL-E-3算力" prop="dall_power"> <el-form-item label="DALL-E-3算力" prop="dall_power">
<el-input v-model.number="system['dall_power']" placeholder="使用DALL-E-3画一张图消耗算力"/> <el-input v-model.number="system['dall_power']" placeholder="使用DALL-E-3画一张图消耗算力"/>
</el-form-item> </el-form-item>
<el-form-item label="开放注册" prop="enabled_register"> </el-tab-pane>
<el-switch v-model="system['enabled_register']"/> <el-tab-pane label="众筹支付">
<el-tooltip
effect="dark"
content="关闭注册之后只能通过管理后台添加用户"
raw-content
placement="right"
>
<el-icon>
<InfoFilled/>
</el-icon>
</el-tooltip>
</el-form-item>
<el-form-item label="注册方式" prop="register_ways">
<el-checkbox-group v-model="system['register_ways']">
<el-checkbox label="mobile">手机注册</el-checkbox>
<el-checkbox label="email">邮箱注册</el-checkbox>
<el-checkbox label="username">用户名注册</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="启用众筹功能" prop="enabled_reward"> <el-form-item label="启用众筹功能" prop="enabled_reward">
<el-switch v-model="system['enabled_reward']"/> <el-switch v-model="system['enabled_reward']"/>
<el-tooltip <el-tooltip
@ -143,23 +230,6 @@
</el-form-item> </el-form-item>
</div> </div>
<el-form-item label="微信客服二维码" prop="wechat_card_url">
<el-input v-model="system['wechat_card_url']" placeholder="微信客服二维码">
<template #append>
<el-upload
:auto-upload="true"
:show-file-list="false"
@click="beforeUpload('wechat_card_url')"
:http-request="uploadImg"
>
<el-icon class="uploader-icon">
<UploadFilled/>
</el-icon>
</el-upload>
</template>
</el-input>
</el-form-item>
<el-form-item label="订单超时时间" prop="order_pay_timeout"> <el-form-item label="订单超时时间" prop="order_pay_timeout">
<div class="tip-input"> <div class="tip-input">
<el-input v-model.number="system['order_pay_timeout']" placeholder="单位:秒"/> <el-input v-model.number="system['order_pay_timeout']" placeholder="单位:秒"/>
@ -195,55 +265,14 @@
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
</el-tab-pane>
</el-tabs>
<el-form-item label="默认AI模型" prop="default_models"> <div style="padding: 10px;">
<template #default>
<div class="tip-input">
<el-select
v-model="system['default_models']"
multiple
:filterable="true"
placeholder="选择AI模型多选"
style="width: 100%"
>
<el-option
v-for="item in models"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
<div class="info">
<el-tooltip
class="box-item"
effect="dark"
content="新用户注册默认开通的 AI 模型"
placement="right"
>
<el-icon>
<InfoFilled/>
</el-icon>
</el-tooltip>
</div>
</div>
</template>
</el-form-item>
<el-form-item label="开启聊天上下文">
<el-switch v-model="system['enable_context']"/>
</el-form-item>
<el-form-item label="会话上下文深度">
<div class="tip-input-line">
<el-input-number v-model="system['context_deep']" :min="0" :max="10"/>
<div class="tip">会话上下文深度在老会话中继续会话默认加载多少条聊天记录作为上下文如果设置为
0
则不加载聊天记录仅仅使用当前角色的上下文该配置参数最好设置需要为偶数否则将无法兼容百度的 API
</div>
</div>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="save('system')">保存</el-button> <el-button type="primary" @click="save('system')">保存</el-button>
</el-form-item> </el-form-item>
</div>
</el-form> </el-form>
</div> </div>
</el-tab-pane> </el-tab-pane>
@ -457,11 +486,11 @@ const onUploadImg = (files, callback) => {
display flex display flex
justify-content center justify-content center
.el-tabs { .sys-tabs {
width 100% width 100%
background-color var(--el-bg-color) background-color var(--el-bg-color)
padding 10px 20px 40px 20px padding 10px 20px 40px 20px
border: 1px solid var(--el-border-color); //border: 1px solid var(--el-border-color);
.container { .container {
.el-form { .el-form {

View File

@ -350,7 +350,8 @@ onMounted(() => {
}) })
httpGet("/api/config/get?key=system").then(res => { httpGet("/api/config/get?key=system").then(res => {
sdPower.value = res.data["sd_power"] sdPower.value = res.data.sd_power
params.value.neg_prompt = res.data.sd_neg_prompt
}).catch(e => { }).catch(e => {
showNotify({type: "danger", message: "获取系统配置失败:" + e.message}) showNotify({type: "danger", message: "获取系统配置失败:" + e.message})
}) })