From 48f9ed29e87bdbf946a7e151de08bf8c123febf6 Mon Sep 17 00:00:00 2001 From: Buer <42402987+MartialBE@users.noreply.github.com> Date: Fri, 2 Feb 2024 10:03:00 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20support=20deepseek=20(#60)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constants.go | 2 ++ common/model-ratio.go | 2 ++ providers/deepseek/base.go | 36 +++++++++++++++++++++++++++ providers/providers.go | 2 ++ web/src/constants/ChannelConstants.js | 6 +++++ web/src/views/Channel/type/Config.js | 6 +++++ 6 files changed, 54 insertions(+) create mode 100644 providers/deepseek/base.go diff --git a/common/constants.go b/common/constants.go index 31823bce..3a1698dc 100644 --- a/common/constants.go +++ b/common/constants.go @@ -191,6 +191,7 @@ const ( ChannelTypeGemini = 25 ChannelTypeBaichuan = 26 ChannelTypeMiniMax = 27 + ChannelTypeDeepseek = 28 ) var ChannelBaseURLs = []string{ @@ -222,6 +223,7 @@ var ChannelBaseURLs = []string{ "", //25 "https://api.baichuan-ai.com", //26 "https://api.minimax.chat/v1", //27 + "https://api.deepseek.com", //28 } const ( diff --git a/common/model-ratio.go b/common/model-ratio.go index 662dc548..b743ed26 100644 --- a/common/model-ratio.go +++ b/common/model-ratio.go @@ -108,6 +108,8 @@ func init() { "abab5.5-chat": {1.0714, ChannelTypeMiniMax}, // ¥0.015 / 1k tokens "abab6-chat": {14.2857, ChannelTypeMiniMax}, // ¥0.2 / 1k tokens "embo-01": {0.0357, ChannelTypeMiniMax}, // ¥0.0005 / 1k tokens + "deepseek-coder": {0.75, ChannelTypeDeepseek}, // 暂定 $0.0015 / 1K tokens + "deepseek-chat": {0.75, ChannelTypeDeepseek}, // 暂定 $0.0015 / 1K tokens } ModelRatio = make(map[string]float64) diff --git a/providers/deepseek/base.go b/providers/deepseek/base.go new file mode 100644 index 00000000..5f0936d7 --- /dev/null +++ b/providers/deepseek/base.go @@ -0,0 +1,36 @@ +package deepseek + +import ( + "one-api/common/requester" + "one-api/model" + "one-api/providers/base" + "one-api/providers/openai" +) + +type DeepseekProviderFactory struct{} + +// 创建 DeepseekProvider +func (f DeepseekProviderFactory) Create(channel *model.Channel) base.ProviderInterface { + config := getDeepseekConfig() + return &DeepseekProvider{ + OpenAIProvider: openai.OpenAIProvider{ + BaseProvider: base.BaseProvider{ + Config: config, + Channel: channel, + Requester: requester.NewHTTPRequester(*channel.Proxy, openai.RequestErrorHandle), + }, + BalanceAction: false, + }, + } +} + +func getDeepseekConfig() base.ProviderConfig { + return base.ProviderConfig{ + BaseURL: "https://api.deepseek.com", + ChatCompletions: "/v1/chat/completions", + } +} + +type DeepseekProvider struct { + openai.OpenAIProvider +} diff --git a/providers/providers.go b/providers/providers.go index 6b97863a..0bce6e6a 100644 --- a/providers/providers.go +++ b/providers/providers.go @@ -15,6 +15,7 @@ import ( "one-api/providers/base" "one-api/providers/claude" "one-api/providers/closeai" + "one-api/providers/deepseek" "one-api/providers/gemini" "one-api/providers/minimax" "one-api/providers/openai" @@ -56,6 +57,7 @@ func init() { providerFactories[common.ChannelTypeGemini] = gemini.GeminiProviderFactory{} providerFactories[common.ChannelTypeBaichuan] = baichuan.BaichuanProviderFactory{} providerFactories[common.ChannelTypeMiniMax] = minimax.MiniMaxProviderFactory{} + providerFactories[common.ChannelTypeDeepseek] = deepseek.DeepseekProviderFactory{} } diff --git a/web/src/constants/ChannelConstants.js b/web/src/constants/ChannelConstants.js index 023a17ba..926ca9c6 100644 --- a/web/src/constants/ChannelConstants.js +++ b/web/src/constants/ChannelConstants.js @@ -77,6 +77,12 @@ export const CHANNEL_OPTIONS = { value: 27, color: 'orange' }, + 28: { + key: 28, + text: 'Deepseek', + value: 28, + color: 'default' + }, 24: { key: 24, text: 'Azure Speech', diff --git a/web/src/views/Channel/type/Config.js b/web/src/views/Channel/type/Config.js index 85cb59f4..b04e0597 100644 --- a/web/src/views/Channel/type/Config.js +++ b/web/src/views/Channel/type/Config.js @@ -175,6 +175,12 @@ const typeConfig = { prompt: { key: '按照如下格式输入:APISecret|groupID' } + }, + 28: { + input: { + models: ['deepseek-coder', 'deepseek-chat'], + test_model: 'deepseek-chat' + } } };