Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
new-api
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
62934307
authored
Jan 08, 2026
by
Bliod-Cook
Committed by
GitHub
Jan 08, 2026
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'QuantumNous:main' into main
parents
c0a9934a
4ffe7dc5
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
34 additions
and
13 deletions
+34
-13
README.en.md
+5
-3
README.fr.md
+5
-3
README.ja.md
+5
-3
README.md
+5
-3
common/init.go
+1
-1
common/str.go
+5
-0
relay/relay_task.go
+8
-0
No files found.
README.en.md
View file @
62934307
...
...
@@ -213,9 +213,11 @@ docker run --name new-api -d --restart always \
-
🚦 User-level model rate limiting
**Format Conversion:**
-
🔄 OpenAI ⇄ Claude Messages
-
🔄 OpenAI ⇄ Gemini Chat
-
🔄 Thinking-to-content functionality
-
🔄
**OpenAI Compatible ⇄ Claude Messages**
-
🔄
**OpenAI Compatible → Google Gemini**
-
🔄
**Google Gemini → OpenAI Compatible**
- Text only, function calling not supported yet
-
🚧
**OpenAI Compatible ⇄ OpenAI Responses**
- In development
-
🔄
**Thinking-to-content functionality**
**Reasoning Effort Support:**
...
...
README.fr.md
View file @
62934307
...
...
@@ -212,9 +212,11 @@ docker run --name new-api -d --restart always \
-
🚦 Limitation du débit du modèle pour les utilisateurs
**Conversion de format:**
-
🔄 OpenAI ⇄ Claude Messages
-
🔄 OpenAI ⇄ Gemini Chat
-
🔄 Fonctionnalité de la pensée au contenu
-
🔄
**OpenAI Compatible ⇄ Claude Messages**
-
🔄
**OpenAI Compatible → Google Gemini**
-
🔄
**Google Gemini → OpenAI Compatible**
- Texte uniquement, les appels de fonction ne sont pas encore pris en charge
-
🚧
**OpenAI Compatible ⇄ OpenAI Responses**
- En développement
-
🔄
**Fonctionnalité de la pensée au contenu**
**Prise en charge de l'effort de raisonnement:**
...
...
README.ja.md
View file @
62934307
...
...
@@ -218,9 +218,11 @@ docker run --name new-api -d --restart always \
-
🚦 ユーザーレベルモデルレート制限
**フォーマット変換:**
-
🔄 OpenAI ⇄ Claude Messages
-
🔄 OpenAI ⇄ Gemini Chat
-
🔄 思考からコンテンツへの機能
-
🔄
**OpenAI Compatible ⇄ Claude Messages**
-
🔄
**OpenAI Compatible → Google Gemini**
-
🔄
**Google Gemini → OpenAI Compatible**
- テキストのみ、関数呼び出しはまだサポートされていません
-
🚧
**OpenAI Compatible ⇄ OpenAI Responses**
- 開発中
-
🔄
**思考からコンテンツへの機能**
**Reasoning Effort サポート:**
...
...
README.md
View file @
62934307
...
...
@@ -214,9 +214,11 @@ docker run --name new-api -d --restart always \
-
🚦 用户级别模型限流
**格式转换:**
-
🔄 OpenAI ⇄ Claude Messages
-
🔄 OpenAI ⇄ Gemini Chat
-
🔄 思考转内容功能
-
🔄
**OpenAI Compatible ⇄ Claude Messages**
-
🔄
**OpenAI Compatible → Google Gemini**
-
🔄
**Google Gemini → OpenAI Compatible**
- 仅支持文本,暂不支持函数调用
-
🚧
**OpenAI Compatible ⇄ OpenAI Responses**
- 开发中
-
🔄
**思考转内容功能**
**Reasoning Effort 支持:**
...
...
common/init.go
View file @
62934307
...
...
@@ -118,7 +118,7 @@ func initConstantEnv() {
constant
.
MaxFileDownloadMB
=
GetEnvOrDefault
(
"MAX_FILE_DOWNLOAD_MB"
,
64
)
constant
.
StreamScannerMaxBufferMB
=
GetEnvOrDefault
(
"STREAM_SCANNER_MAX_BUFFER_MB"
,
64
)
// MaxRequestBodyMB 请求体最大大小(解压后),用于防止超大请求/zip bomb导致内存暴涨
constant
.
MaxRequestBodyMB
=
GetEnvOrDefault
(
"MAX_REQUEST_BODY_MB"
,
64
)
constant
.
MaxRequestBodyMB
=
GetEnvOrDefault
(
"MAX_REQUEST_BODY_MB"
,
128
)
// ForceStreamOption 覆盖请求参数,强制返回usage信息
constant
.
ForceStreamOption
=
GetEnvOrDefaultBool
(
"FORCE_STREAM_OPTION"
,
true
)
constant
.
CountToken
=
GetEnvOrDefaultBool
(
"CountToken"
,
true
)
...
...
common/str.go
View file @
62934307
...
...
@@ -16,6 +16,8 @@ var (
maskURLPattern
=
regexp
.
MustCompile
(
`(http|https)://[^\s/$.?#].[^\s]*`
)
maskDomainPattern
=
regexp
.
MustCompile
(
`\b(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}\b`
)
maskIPPattern
=
regexp
.
MustCompile
(
`\b(?:\d{1,3}\.){3}\d{1,3}\b`
)
// maskApiKeyPattern matches patterns like 'api_key:xxx' or "api_key:xxx" to mask the API key value
maskApiKeyPattern
=
regexp
.
MustCompile
(
`(['"]?)api_key:([^\s'"]+)(['"]?)`
)
)
func
GetStringIfEmpty
(
str
string
,
defaultValue
string
)
string
{
...
...
@@ -235,5 +237,8 @@ func MaskSensitiveInfo(str string) string {
// Mask IP addresses
str
=
maskIPPattern
.
ReplaceAllString
(
str
,
"***.***.***.***"
)
// Mask API keys (e.g., "api_key:AIzaSyAAAaUooTUni8AdaOkSRMda30n_Q4vrV70" -> "api_key:***")
str
=
maskApiKeyPattern
.
ReplaceAllString
(
str
,
"${1}api_key:***${3}"
)
return
str
}
relay/relay_task.go
View file @
62934307
...
...
@@ -150,6 +150,14 @@ func RelayTaskSubmit(c *gin.Context, info *relaycommon.RelayInfo) (taskErr *dto.
}
}
// 处理 auto 分组:从 context 获取实际选中的分组
// 当使用 auto 分组时,Distribute 中间件会将实际选中的分组存储在 ContextKeyAutoGroup 中
if
autoGroup
,
exists
:=
common
.
GetContextKey
(
c
,
constant
.
ContextKeyAutoGroup
);
exists
{
if
groupStr
,
ok
:=
autoGroup
.
(
string
);
ok
&&
groupStr
!=
""
{
info
.
UsingGroup
=
groupStr
}
}
// 预扣
groupRatio
:=
ratio_setting
.
GetGroupRatio
(
info
.
UsingGroup
)
var
ratio
float64
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment