Compare commits

...

10 Commits

Author SHA1 Message Date
qingfengfenga
1e7cc32b04 Merge 34dda83c04 into 6ab87f8a08 2024-11-10 20:22:35 +08:00
JustSong
6ab87f8a08 feat: add warning in log when system prompt is reset
Some checks failed
CI / Unit tests (push) Has been cancelled
CI / commit_lint (push) Has been cancelled
2024-11-10 17:18:46 +08:00
qingfengfenga
34dda83c04 Merge branch 'songquanpeng:main' into main 2024-06-03 15:34:30 +08:00
qingfengfenga
bdb8571bdb Merge branch 'songquanpeng:main' into main 2024-05-14 12:53:12 +08:00
qingfengfenga
1e330950d6 Merge branch 'songquanpeng:main' into main 2024-03-16 23:12:36 +08:00
qingfengfenga
b356750bd5 Merge branch 'songquanpeng:main' into main 2024-03-05 17:55:12 +08:00
qingfengfenga
1b877cbab0 Merge branch 'songquanpeng:main' into main 2024-03-03 21:59:11 +08:00
qingfengfenga
fa5774c7cb Merge branch 'songquanpeng:main' into main 2024-02-26 21:15:04 +08:00
qingfengfenga
b07f701261 Add theme selection environment variables 2024-02-21 14:39:11 +08:00
qingfengfenga
79f4dedbf7 Add postgre docker-compose file 2024-02-21 14:28:04 +08:00
4 changed files with 64 additions and 8 deletions

50
docker-compose-pg.yml Normal file
View File

@@ -0,0 +1,50 @@
version: '3.4'
services:
one-api:
image: justsong/one-api:latest
container_name: one-api
restart: always
command: --log-dir /app/logs
ports:
- "3000:3000"
volumes:
- ./data/oneapi:/data
- ./logs:/app/logs
environment:
# - SQL_DSN=oneapi:123456@tcp(db:3306)/one-api # 修改此行,或注释掉以使用 SQLite 作为数据库
- SQL_DSN=postgres://oneapi:123456@db:5432/one-api
- REDIS_CONN_STRING=redis://redis
- SESSION_SECRET=random_string # 修改为随机字符串
- TZ=Asia/Shanghai
# - NODE_TYPE=slave # 多机部署时从节点取消注释该行
# - SYNC_FREQUENCY=60 # 需要定期从数据库加载数据时取消注释该行
# - FRONTEND_BASE_URL=https://openai.justsong.cn # 多机部署时从节点取消注释该行
- THEME=berry # 使用berry主题注销该行使用默认主题
depends_on:
- redis
- db
healthcheck:
test: [ "CMD-SHELL", "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' | awk -F: '{print $2}'" ]
interval: 30s
timeout: 10s
retries: 3
redis:
image: redis:latest
container_name: redis
restart: always
db:
image: postgres:16.1-alpine3.19 # 数据库版本
restart: always
container_name: postgres # 容器名
volumes:
- ./data/postgres:/var/lib/postgresql/data #挂载目录,持久化存储
ports:
- '5432:5432'
environment:
POSTGRES_USER: 'oneapi'
POSTGRES_PASSWORD: '123456' # 设置用户密码
POSTGRES_DB: 'one-api'
PGDATA: '/var/lib/postgresql/data/pgdata' # 设置数据目录

View File

@@ -19,6 +19,7 @@ services:
# - NODE_TYPE=slave # 多机部署时从节点取消注释该行
# - SYNC_FREQUENCY=60 # 需要定期从数据库加载数据时取消注释该行
# - FRONTEND_BASE_URL=https://openai.justsong.cn # 多机部署时从节点取消注释该行
- THEME=berry # 使用berry主题注销该行使用默认主题
depends_on:
- redis
- db

View File

@@ -91,7 +91,7 @@ func preConsumeQuota(ctx context.Context, textRequest *relaymodel.GeneralOpenAIR
return preConsumedQuota, nil
}
func postConsumeQuota(ctx context.Context, usage *relaymodel.Usage, meta *meta.Meta, textRequest *relaymodel.GeneralOpenAIRequest, ratio float64, preConsumedQuota int64, modelRatio float64, groupRatio float64) {
func postConsumeQuota(ctx context.Context, usage *relaymodel.Usage, meta *meta.Meta, textRequest *relaymodel.GeneralOpenAIRequest, ratio float64, preConsumedQuota int64, modelRatio float64, groupRatio float64, systemPromptReset bool) {
if usage == nil {
logger.Error(ctx, "usage is nil, which is unexpected")
return
@@ -119,7 +119,11 @@ func postConsumeQuota(ctx context.Context, usage *relaymodel.Usage, meta *meta.M
if err != nil {
logger.Error(ctx, "error update user quota cache: "+err.Error())
}
logContent := fmt.Sprintf("模型倍率 %.2f,分组倍率 %.2f,补全倍率 %.2f", modelRatio, groupRatio, completionRatio)
var extraLog string
if systemPromptReset {
extraLog = " (注意系统提示词已被重置)"
}
logContent := fmt.Sprintf("模型倍率 %.2f,分组倍率 %.2f,补全倍率 %.2f%s", modelRatio, groupRatio, completionRatio, extraLog)
model.RecordConsumeLog(ctx, meta.UserId, meta.ChannelId, promptTokens, completionTokens, textRequest.Model, meta.TokenName, quota, logContent)
model.UpdateUserUsedQuotaAndRequestCount(meta.UserId, quota)
model.UpdateChannelUsedQuota(meta.ChannelId, quota)
@@ -156,21 +160,22 @@ func isErrorHappened(meta *meta.Meta, resp *http.Response) bool {
return false
}
func setSystemPrompt(ctx context.Context, request *relaymodel.GeneralOpenAIRequest, prompt string) {
func setSystemPrompt(ctx context.Context, request *relaymodel.GeneralOpenAIRequest, prompt string) (reset bool) {
if prompt == "" {
return
return false
}
if len(request.Messages) == 0 {
return
return false
}
if request.Messages[0].Role == role.System {
request.Messages[0].Content = prompt
logger.Infof(ctx, "rewrite system prompt")
return
return true
}
request.Messages = append([]relaymodel.Message{{
Role: role.System,
Content: prompt,
}}, request.Messages...)
logger.Infof(ctx, "add system prompt")
return true
}

View File

@@ -37,7 +37,7 @@ func RelayTextHelper(c *gin.Context) *model.ErrorWithStatusCode {
textRequest.Model, _ = getMappedModelName(textRequest.Model, meta.ModelMapping)
meta.ActualModelName = textRequest.Model
// set system prompt if not empty
setSystemPrompt(ctx, textRequest, meta.SystemPrompt)
systemPromptReset := setSystemPrompt(ctx, textRequest, meta.SystemPrompt)
// get model ratio & group ratio
modelRatio := billingratio.GetModelRatio(textRequest.Model, meta.ChannelType)
groupRatio := billingratio.GetGroupRatio(meta.Group)
@@ -82,7 +82,7 @@ func RelayTextHelper(c *gin.Context) *model.ErrorWithStatusCode {
return respErr
}
// post-consume quota
go postConsumeQuota(ctx, usage, meta, textRequest, ratio, preConsumedQuota, modelRatio, groupRatio)
go postConsumeQuota(ctx, usage, meta, textRequest, ratio, preConsumedQuota, modelRatio, groupRatio, systemPromptReset)
return nil
}