Skip to content

Commit ae00a99

Browse files
committed
feat: 媒体请求计费选项
1 parent a6a2d52 commit ae00a99

3 files changed

Lines changed: 15 additions & 1 deletion

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@
7474
- `STREAMING_TIMEOUT`:设置流式一次回复的超时时间,默认为 30 秒
7575
- `DIFY_DEBUG`:设置 Dify 渠道是否输出工作流和节点信息到客户端,默认为 `true`
7676
- `FORCE_STREAM_OPTION`:是否覆盖客户端stream_options参数,请求上游返回流模式usage,默认为 `true`
77+
- `GET_MEDIA_TOKEN`:是统计图片token,默认为 `true`,关闭后将不再在本地计算图片token,可能会导致和上游计费不同,此项覆盖 `GET_MEDIA_TOKEN_NOT_STREAM` 选项作用,
78+
- `GET_MEDIA_TOKEN_NOT_STREAM`:是否在非流(`stream=false`)情况下统计图片token,默认为 `true`
7779
## 部署
7880
### 部署要求
7981
- 本地数据库(默认):SQLite(Docker 部署默认使用 SQLite,必须挂载 `/data` 目录到宿主机)

constant/env.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,7 @@ var DifyDebug = common.GetEnvOrDefaultBool("DIFY_DEBUG", true)
99

1010
// ForceStreamOption 覆盖请求参数,强制返回usage信息
1111
var ForceStreamOption = common.GetEnvOrDefaultBool("FORCE_STREAM_OPTION", true)
12+
13+
var GetMediaToken = common.GetEnvOrDefaultBool("GET_MEDIA_TOKEN", true)
14+
15+
var GetMediaTokenNotStream = common.GetEnvOrDefaultBool("GET_MEDIA_TOKEN_NOT_STREAM", true)

service/token_counter.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"log"
1010
"math"
1111
"one-api/common"
12+
"one-api/constant"
1213
"one-api/dto"
1314
"strings"
1415
"unicode/utf8"
@@ -81,13 +82,20 @@ func getTokenNum(tokenEncoder *tiktoken.Tiktoken, text string) int {
8182
}
8283

8384
func getImageToken(imageUrl *dto.MessageImageUrl, model string, stream bool) (int, error) {
84-
// TODO: 非流模式下不计算图片token数量
8585
if model == "glm-4v" {
8686
return 1047, nil
8787
}
8888
if imageUrl.Detail == "low" {
8989
return 85, nil
9090
}
91+
// TODO: 非流模式下不计算图片token数量
92+
if !constant.GetMediaTokenNotStream && !stream {
93+
return 1000, nil
94+
}
95+
// 是否统计图片token
96+
if !constant.GetMediaToken {
97+
return 1000, nil
98+
}
9199
// 同步One API的图片计费逻辑
92100
if imageUrl.Detail == "auto" || imageUrl.Detail == "" {
93101
imageUrl.Detail = "high"

0 commit comments

Comments
 (0)