feat: add support for xAI (#1915)
Some checks failed
CI / Unit tests (push) Has been cancelled
CI / commit_lint (push) Has been cancelled

This commit is contained in:
Ryo Shen 2024-11-07 23:52:38 +08:00 committed by GitHub
parent b0b88a79ff
commit 8ec092ba44
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 29 additions and 2 deletions

View File

@ -90,6 +90,7 @@ _✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用
+ [x] [together.ai](https://www.together.ai/) + [x] [together.ai](https://www.together.ai/)
+ [x] [novita.ai](https://www.novita.ai/) + [x] [novita.ai](https://www.novita.ai/)
+ [x] [硅基流动 SiliconCloud](https://siliconflow.cn/siliconcloud) + [x] [硅基流动 SiliconCloud](https://siliconflow.cn/siliconcloud)
+ [x] [xAI](https://x.ai/)
2. 支持配置镜像以及众多[第三方代理服务](https://iamazing.cn/page/openai-api-third-party-services)。 2. 支持配置镜像以及众多[第三方代理服务](https://iamazing.cn/page/openai-api-third-party-services)。
3. 支持通过**负载均衡**的方式访问多个渠道。 3. 支持通过**负载均衡**的方式访问多个渠道。
4. 支持 **stream 模式**,可以通过流式传输实现打字机效果。 4. 支持 **stream 模式**,可以通过流式传输实现打字机效果。

View File

@ -11,9 +11,10 @@ import (
"github.com/songquanpeng/one-api/relay/adaptor/mistral" "github.com/songquanpeng/one-api/relay/adaptor/mistral"
"github.com/songquanpeng/one-api/relay/adaptor/moonshot" "github.com/songquanpeng/one-api/relay/adaptor/moonshot"
"github.com/songquanpeng/one-api/relay/adaptor/novita" "github.com/songquanpeng/one-api/relay/adaptor/novita"
"github.com/songquanpeng/one-api/relay/adaptor/siliconflow"
"github.com/songquanpeng/one-api/relay/adaptor/stepfun" "github.com/songquanpeng/one-api/relay/adaptor/stepfun"
"github.com/songquanpeng/one-api/relay/adaptor/togetherai" "github.com/songquanpeng/one-api/relay/adaptor/togetherai"
"github.com/songquanpeng/one-api/relay/adaptor/siliconflow" "github.com/songquanpeng/one-api/relay/adaptor/xai"
"github.com/songquanpeng/one-api/relay/channeltype" "github.com/songquanpeng/one-api/relay/channeltype"
) )
@ -32,6 +33,7 @@ var CompatibleChannels = []int{
channeltype.TogetherAI, channeltype.TogetherAI,
channeltype.Novita, channeltype.Novita,
channeltype.SiliconFlow, channeltype.SiliconFlow,
channeltype.XAI,
} }
func GetCompatibleChannelMeta(channelType int) (string, []string) { func GetCompatibleChannelMeta(channelType int) (string, []string) {
@ -64,6 +66,8 @@ func GetCompatibleChannelMeta(channelType int) (string, []string) {
return "novita", novita.ModelList return "novita", novita.ModelList
case channeltype.SiliconFlow: case channeltype.SiliconFlow:
return "siliconflow", siliconflow.ModelList return "siliconflow", siliconflow.ModelList
case channeltype.XAI:
return "xai", xai.ModelList
default: default:
return "openai", ModelList return "openai", ModelList
} }

View File

@ -0,0 +1,5 @@
package xai
var ModelList = []string{
"grok-beta",
}

View File

@ -209,6 +209,8 @@ var ModelRatio = map[string]float64{
"deepl-zh": 25.0 / 1000 * USD, "deepl-zh": 25.0 / 1000 * USD,
"deepl-en": 25.0 / 1000 * USD, "deepl-en": 25.0 / 1000 * USD,
"deepl-ja": 25.0 / 1000 * USD, "deepl-ja": 25.0 / 1000 * USD,
// https://console.x.ai/
"grok-beta": 5.0 / 1000 * USD,
} }
var CompletionRatio = map[string]float64{ var CompletionRatio = map[string]float64{
@ -373,6 +375,8 @@ func GetCompletionRatio(name string, channelType int) float64 {
return 3 return 3
case "command-r-plus": case "command-r-plus":
return 5 return 5
case "grok-beta":
return 3
} }
return 1 return 1
} }

View File

@ -46,5 +46,6 @@ const (
VertextAI VertextAI
Proxy Proxy
SiliconFlow SiliconFlow
XAI
Dummy Dummy
) )

View File

@ -46,6 +46,7 @@ var ChannelBaseURLs = []string{
"", // 42 "", // 42
"", // 43 "", // 43
"https://api.siliconflow.cn", // 44 "https://api.siliconflow.cn", // 44
"https://api.x.ai", // 45
} }
func init() { func init() {

View File

@ -30,6 +30,7 @@ export const CHANNEL_OPTIONS = [
{ key: 42, text: 'VertexAI', value: 42, color: 'blue' }, { key: 42, text: 'VertexAI', value: 42, color: 'blue' },
{ key: 43, text: 'Proxy', value: 43, color: 'blue' }, { key: 43, text: 'Proxy', value: 43, color: 'blue' },
{ key: 44, text: 'SiliconFlow', value: 44, color: 'blue' }, { key: 44, text: 'SiliconFlow', value: 44, color: 'blue' },
{ key: 45, text: 'xAI', value: 45, color: 'blue' },
{ key: 8, text: '自定义渠道', value: 8, color: 'pink' }, { key: 8, text: '自定义渠道', value: 8, color: 'pink' },
{ key: 22, text: '知识库FastGPT', value: 22, color: 'blue' }, { key: 22, text: '知识库FastGPT', value: 22, color: 'blue' },
{ key: 21, text: '知识库AI Proxy', value: 21, color: 'purple' }, { key: 21, text: '知识库AI Proxy', value: 21, color: 'purple' },

View File

@ -179,6 +179,12 @@ export const CHANNEL_OPTIONS = {
value: 44, value: 44,
color: 'primary' color: 'primary'
}, },
45: {
key: 45,
text: 'xAI',
value: 45,
color: 'primary'
},
41: { 41: {
key: 41, key: 41,
text: 'Novita', text: 'Novita',

View File

@ -223,6 +223,9 @@ const typeConfig = {
}, },
modelGroup: 'anthropic' modelGroup: 'anthropic'
}, },
45: {
modelGroup: 'xai'
},
}; };
export { defaultConfig, typeConfig }; export { defaultConfig, typeConfig };

View File

@ -30,6 +30,7 @@ export const CHANNEL_OPTIONS = [
{ key: 42, text: 'VertexAI', value: 42, color: 'blue' }, { key: 42, text: 'VertexAI', value: 42, color: 'blue' },
{ key: 43, text: 'Proxy', value: 43, color: 'blue' }, { key: 43, text: 'Proxy', value: 43, color: 'blue' },
{ key: 44, text: 'SiliconFlow', value: 44, color: 'blue' }, { key: 44, text: 'SiliconFlow', value: 44, color: 'blue' },
{ key: 45, text: 'xAI', value: 45, color: 'blue' },
{ key: 8, text: '自定义渠道', value: 8, color: 'pink' }, { key: 8, text: '自定义渠道', value: 8, color: 'pink' },
{ key: 22, text: '知识库FastGPT', value: 22, color: 'blue' }, { key: 22, text: '知识库FastGPT', value: 22, color: 'blue' },
{ key: 21, text: '知识库AI Proxy', value: 21, color: 'purple' }, { key: 21, text: '知识库AI Proxy', value: 21, color: 'purple' },