diff --git a/relay/channel/volcengine/adaptor.go b/relay/channel/volcengine/adaptor.go index eb88412a..21d6e170 100644 --- a/relay/channel/volcengine/adaptor.go +++ b/relay/channel/volcengine/adaptor.go @@ -9,6 +9,7 @@ import ( "mime/multipart" "net/http" "net/textproto" + channelconstant "one-api/constant" "one-api/dto" "one-api/relay/channel" "one-api/relay/channel/openai" @@ -188,20 +189,26 @@ func (a *Adaptor) Init(info *relaycommon.RelayInfo) { } func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) { + // 支持自定义域名,如果未设置则使用默认域名 + baseUrl := info.ChannelBaseUrl + if baseUrl == "" { + baseUrl = channelconstant.ChannelBaseURLs[channelconstant.ChannelTypeVolcEngine] + } + switch info.RelayMode { case constant.RelayModeChatCompletions: if strings.HasPrefix(info.UpstreamModelName, "bot") { - return fmt.Sprintf("%s/api/v3/bots/chat/completions", info.ChannelBaseUrl), nil + return fmt.Sprintf("%s/api/v3/bots/chat/completions", baseUrl), nil } - return fmt.Sprintf("%s/api/v3/chat/completions", info.ChannelBaseUrl), nil + return fmt.Sprintf("%s/api/v3/chat/completions", baseUrl), nil case constant.RelayModeEmbeddings: - return fmt.Sprintf("%s/api/v3/embeddings", info.ChannelBaseUrl), nil + return fmt.Sprintf("%s/api/v3/embeddings", baseUrl), nil case constant.RelayModeImagesGenerations: - return fmt.Sprintf("%s/api/v3/images/generations", info.ChannelBaseUrl), nil + return fmt.Sprintf("%s/api/v3/images/generations", baseUrl), nil case constant.RelayModeImagesEdits: - return fmt.Sprintf("%s/api/v3/images/edits", info.ChannelBaseUrl), nil + return fmt.Sprintf("%s/api/v3/images/edits", baseUrl), nil case constant.RelayModeRerank: - return fmt.Sprintf("%s/api/v3/rerank", info.ChannelBaseUrl), nil + return fmt.Sprintf("%s/api/v3/rerank", baseUrl), nil default: } return "", fmt.Errorf("unsupported relay mode: %d", info.RelayMode) diff --git a/relay/channel/volcengine/constants.go b/relay/channel/volcengine/constants.go index fca10e7c..87a12b27 100644 --- a/relay/channel/volcengine/constants.go +++ b/relay/channel/volcengine/constants.go @@ -9,6 +9,11 @@ var ModelList = []string{ "Doubao-lite-4k", "Doubao-embedding", "doubao-seedream-4-0-250828", + "seedream-4-0-250828", + "doubao-seedance-1-0-pro-250528", + "seedance-1-0-pro-250528", + "doubao-seed-1-6-thinking-250715", + "seed-1-6-thinking-250715", } var ChannelName = "volcengine" diff --git a/web/src/components/table/channels/modals/EditChannelModal.jsx b/web/src/components/table/channels/modals/EditChannelModal.jsx index 967bf88a..dd620fe0 100644 --- a/web/src/components/table/channels/modals/EditChannelModal.jsx +++ b/web/src/components/table/channels/modals/EditChannelModal.jsx @@ -235,7 +235,7 @@ const EditChannelModal = (props) => { pass_through_body_enabled: false, system_prompt: '', }); - const showApiConfigCard = inputs.type !== 45; // 控制是否显示 API 配置卡片(仅当渠道类型不是 豆包 时显示) + const showApiConfigCard = true; // 控制是否显示 API 配置卡片 const getInitValues = () => ({ ...originInputs }); // 处理渠道额外设置的更新 @@ -342,6 +342,10 @@ const EditChannelModal = (props) => { case 36: localModels = ['suno_music', 'suno_lyrics']; break; + case 45: + localModels = getChannelModels(value); + setInputs((prevInputs) => ({ ...prevInputs, base_url: 'https://ark.cn-beijing.volces.com' })); + break; default: localModels = getChannelModels(value); break; @@ -842,6 +846,10 @@ const EditChannelModal = (props) => { showInfo(t('请至少选择一个模型!')); return; } + if (localInputs.type === 45 && (!localInputs.base_url || localInputs.base_url.trim() === '')) { + showInfo(t('请输入API地址!')); + return; + } if ( localInputs.model_mapping && localInputs.model_mapping !== '' && @@ -1809,6 +1817,30 @@ const EditChannelModal = (props) => { /> )} + + {inputs.type === 45 && ( +
+ + handleInputChange('base_url', value) + } + optionList={[ + { + value: 'https://ark.cn-beijing.volces.com', + label: 'https://ark.cn-beijing.volces.com' + }, + { + value: 'https://ark.ap-southeast.bytepluses.com', + label: 'https://ark.ap-southeast.bytepluses.com' + } + ]} + defaultValue='https://ark.cn-beijing.volces.com' + /> +
+ )} )}