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
29fc0a6b
authored
Feb 28, 2025
by
1808837298@qq.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: Implement model-specific headers configuration for Claude
parent
6be0914b
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
23 additions
and
19 deletions
+23
-19
relay/channel/aws/adaptor.go
+1
-1
relay/channel/claude/adaptor.go
+1
-1
setting/model_setting/claude.go
+12
-10
web/src/components/ModelSetting.js
+2
-2
web/src/pages/Setting/Model/SettingClaudeModel.js
+7
-5
No files found.
relay/channel/aws/adaptor.go
View file @
29fc0a6b
...
...
@@ -39,7 +39,7 @@ func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) {
}
func
(
a
*
Adaptor
)
SetupRequestHeader
(
c
*
gin
.
Context
,
req
*
http
.
Header
,
info
*
relaycommon
.
RelayInfo
)
error
{
model_setting
.
GetClaudeSettings
()
.
WriteHeaders
(
req
)
model_setting
.
GetClaudeSettings
()
.
WriteHeaders
(
info
.
OriginModelName
,
req
)
return
nil
}
...
...
relay/channel/claude/adaptor.go
View file @
29fc0a6b
...
...
@@ -56,7 +56,7 @@ func (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Header, info *rel
anthropicVersion
=
"2023-06-01"
}
req
.
Set
(
"anthropic-version"
,
anthropicVersion
)
model_setting
.
GetClaudeSettings
()
.
WriteHeaders
(
req
)
model_setting
.
GetClaudeSettings
()
.
WriteHeaders
(
info
.
OriginModelName
,
req
)
return
nil
}
...
...
setting/model_setting/claude.go
View file @
29fc0a6b
...
...
@@ -13,15 +13,15 @@ import (
// ClaudeSettings 定义Claude模型的配置
type
ClaudeSettings
struct
{
HeadersSettings
map
[
string
]
[]
string
`json:"
headers_settings"`
ThinkingAdapterEnabled
bool
`json:"thinking_adapter_enabled"`
ThinkingAdapterMaxTokens
int
`json:"thinking_adapter_max_tokens"`
ThinkingAdapterBudgetTokensPercentage
float64
`json:"thinking_adapter_budget_tokens_percentage"`
HeadersSettings
map
[
string
]
map
[
string
][]
string
`json:"model_
headers_settings"`
ThinkingAdapterEnabled
bool
`json:"thinking_adapter_enabled"`
ThinkingAdapterMaxTokens
int
`json:"thinking_adapter_max_tokens"`
ThinkingAdapterBudgetTokensPercentage
float64
`json:"thinking_adapter_budget_tokens_percentage"`
}
// 默认配置
var
defaultClaudeSettings
=
ClaudeSettings
{
HeadersSettings
:
map
[
string
][]
string
{},
HeadersSettings
:
map
[
string
]
map
[
string
]
[]
string
{},
ThinkingAdapterEnabled
:
true
,
ThinkingAdapterMaxTokens
:
8192
,
ThinkingAdapterBudgetTokensPercentage
:
0.8
,
...
...
@@ -40,11 +40,13 @@ func GetClaudeSettings() *ClaudeSettings {
return
&
claudeSettings
}
func
(
c
*
ClaudeSettings
)
WriteHeaders
(
headers
*
http
.
Header
)
{
for
key
,
values
:=
range
c
.
HeadersSettings
{
headers
.
Del
(
key
)
for
_
,
value
:=
range
values
{
headers
.
Add
(
key
,
value
)
func
(
c
*
ClaudeSettings
)
WriteHeaders
(
originModel
string
,
httpHeader
*
http
.
Header
)
{
if
headers
,
ok
:=
c
.
HeadersSettings
[
originModel
];
ok
{
for
headerKey
,
headerValues
:=
range
headers
{
httpHeader
.
Del
(
headerKey
)
for
_
,
headerValue
:=
range
headerValues
{
httpHeader
.
Add
(
headerKey
,
headerValue
)
}
}
}
}
web/src/components/ModelSetting.js
View file @
29fc0a6b
...
...
@@ -13,7 +13,7 @@ const ModelSetting = () => {
let
[
inputs
,
setInputs
]
=
useState
({
'gemini.safety_settings'
:
''
,
'gemini.version_settings'
:
''
,
'claude.headers_settings'
:
''
,
'claude.
model_
headers_settings'
:
''
,
'claude.thinking_adapter_enabled'
:
true
,
'claude.thinking_adapter_max_tokens'
:
8192
,
'claude.thinking_adapter_budget_tokens_percentage'
:
0.8
,
...
...
@@ -30,7 +30,7 @@ const ModelSetting = () => {
if
(
item
.
key
===
'gemini.safety_settings'
||
item
.
key
===
'gemini.version_settings'
||
item
.
key
===
'claude.headers_settings'
item
.
key
===
'claude.
model_
headers_settings'
)
{
item
.
value
=
JSON
.
stringify
(
JSON
.
parse
(
item
.
value
),
null
,
2
);
}
...
...
web/src/pages/Setting/Model/SettingClaudeModel.js
View file @
29fc0a6b
...
...
@@ -11,7 +11,9 @@ import { useTranslation } from 'react-i18next';
import
Text
from
'@douyinfe/semi-ui/lib/es/typography/text'
;
const
CLAUDE_HEADER
=
{
'anthropic-beta'
:
[
'output-128k-2025-02-19'
,
'token-efficient-tools-2025-02-19'
],
'claude-3-7-sonnet-20250219-thinking'
:
{
'anthropic-beta'
:
[
'output-128k-2025-02-19'
,
'token-efficient-tools-2025-02-19'
],
}
};
export
default
function
SettingClaudeModel
(
props
)
{
...
...
@@ -19,7 +21,7 @@ export default function SettingClaudeModel(props) {
const
[
loading
,
setLoading
]
=
useState
(
false
);
const
[
inputs
,
setInputs
]
=
useState
({
'claude.headers_settings'
:
''
,
'claude.
model_
headers_settings'
:
''
,
'claude.thinking_adapter_enabled'
:
true
,
'claude.thinking_adapter_max_tokens'
:
8192
,
'claude.thinking_adapter_budget_tokens_percentage'
:
0.8
,
...
...
@@ -82,9 +84,9 @@ export default function SettingClaudeModel(props) {
<
Col
span
=
{
16
}
>
<
Form
.
TextArea
label
=
{
t
(
'Claude请求头覆盖'
)}
field
=
{
'claude.headers_settings'
}
field
=
{
'claude.
model_
headers_settings'
}
placeholder
=
{
t
(
'为一个 JSON 文本,例如:'
)
+
'\n'
+
JSON
.
stringify
(
CLAUDE_HEADER
,
null
,
2
)}
extraText
=
{
t
(
'示例'
)
+
JSON
.
stringify
(
CLAUDE_HEADER
,
null
,
2
)}
extraText
=
{
t
(
'示例'
)
+
'\n'
+
JSON
.
stringify
(
CLAUDE_HEADER
,
null
,
2
)}
autosize
=
{{
minRows
:
6
,
maxRows
:
12
}}
trigger
=
'blur'
stopValidateWithError
...
...
@@ -94,7 +96,7 @@ export default function SettingClaudeModel(props) {
message
:
t
(
'不是合法的 JSON 字符串'
)
}
]}
onChange
=
{(
value
)
=>
setInputs
({
...
inputs
,
'claude.headers_settings'
:
value
})}
onChange
=
{(
value
)
=>
setInputs
({
...
inputs
,
'claude.
model_
headers_settings'
:
value
})}
/
>
<
/Col
>
<
/Row
>
...
...
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