Skip to content

Commit 3f421c4

Browse files
committed
feat: support Gemini openai compatible api
1 parent 1ce6a22 commit 3f421c4

File tree

8 files changed

+54
-15
lines changed

8 files changed

+54
-15
lines changed

relay/adaptor/gemini/constants.go

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
11
package gemini
22

3+
import (
4+
"github.com/songquanpeng/one-api/relay/adaptor/geminiv2"
5+
)
6+
37
// https://ai.google.dev/models/gemini
48

5-
var ModelList = []string{
6-
"gemini-pro", "gemini-1.0-pro",
7-
// "gemma-2-2b-it", "gemma-2-9b-it", "gemma-2-27b-it",
8-
"gemini-1.5-flash", "gemini-1.5-flash-8b",
9-
"gemini-1.5-pro", "gemini-1.5-pro-experimental",
10-
"text-embedding-004", "aqa",
11-
"gemini-2.0-flash", "gemini-2.0-flash-exp",
12-
"gemini-2.0-flash-lite-preview-02-05",
13-
"gemini-2.0-flash-thinking-exp-01-21",
14-
"gemini-2.0-pro-exp-02-05",
15-
}
9+
var ModelList = geminiv2.ModelList
1610

1711
// ModelsSupportSystemInstruction is the list of models that support system instruction.
1812
//
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package geminiv2
2+
3+
// https://ai.google.dev/models/gemini
4+
5+
var ModelList = []string{
6+
"gemini-pro", "gemini-1.0-pro",
7+
// "gemma-2-2b-it", "gemma-2-9b-it", "gemma-2-27b-it",
8+
"gemini-1.5-flash", "gemini-1.5-flash-8b",
9+
"gemini-1.5-pro", "gemini-1.5-pro-experimental",
10+
"text-embedding-004", "aqa",
11+
"gemini-2.0-flash", "gemini-2.0-flash-exp",
12+
"gemini-2.0-flash-lite-preview-02-05",
13+
"gemini-2.0-flash-thinking-exp-01-21",
14+
"gemini-2.0-pro-exp-02-05",
15+
}

relay/adaptor/geminiv2/main.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package geminiv2
2+
3+
import (
4+
"fmt"
5+
"strings"
6+
7+
"github.com/songquanpeng/one-api/relay/meta"
8+
)
9+
10+
func GetRequestURL(meta *meta.Meta) (string, error) {
11+
baseURL := strings.TrimSuffix(meta.BaseURL, "/")
12+
requestPath := strings.TrimPrefix(meta.RequestURLPath, "/v1")
13+
return fmt.Sprintf("%s%s", baseURL, requestPath), nil
14+
}

relay/adaptor/openai/adaptor.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/songquanpeng/one-api/relay/adaptor/alibailian"
1414
"github.com/songquanpeng/one-api/relay/adaptor/baiduv2"
1515
"github.com/songquanpeng/one-api/relay/adaptor/doubao"
16+
"github.com/songquanpeng/one-api/relay/adaptor/geminiv2"
1617
"github.com/songquanpeng/one-api/relay/adaptor/minimax"
1718
"github.com/songquanpeng/one-api/relay/adaptor/novita"
1819
"github.com/songquanpeng/one-api/relay/channeltype"
@@ -59,6 +60,8 @@ func (a *Adaptor) GetRequestURL(meta *meta.Meta) (string, error) {
5960
return baiduv2.GetRequestURL(meta)
6061
case channeltype.AliBailian:
6162
return alibailian.GetRequestURL(meta)
63+
case channeltype.GeminiOpenAICompatible:
64+
return geminiv2.GetRequestURL(meta)
6265
default:
6366
return GetFullRequestURL(meta.BaseURL, meta.RequestURLPath, meta.ChannelType), nil
6467
}

relay/adaptor/openai/compatible.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/songquanpeng/one-api/relay/adaptor/baiduv2"
88
"github.com/songquanpeng/one-api/relay/adaptor/deepseek"
99
"github.com/songquanpeng/one-api/relay/adaptor/doubao"
10+
"github.com/songquanpeng/one-api/relay/adaptor/geminiv2"
1011
"github.com/songquanpeng/one-api/relay/adaptor/groq"
1112
"github.com/songquanpeng/one-api/relay/adaptor/lingyiwanwu"
1213
"github.com/songquanpeng/one-api/relay/adaptor/minimax"
@@ -82,6 +83,8 @@ func GetCompatibleChannelMeta(channelType int) (string, []string) {
8283
return "openrouter", openrouter.ModelList
8384
case channeltype.AliBailian:
8485
return "alibailian", alibailian.ModelList
86+
case channeltype.GeminiOpenAICompatible:
87+
return "geminiv2", geminiv2.ModelList
8588
default:
8689
return "openai", ModelList
8790
}

relay/channeltype/define.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,6 @@ const (
5252
XunfeiV2
5353
AliBailian
5454
OpenAICompatible
55+
GeminiOpenAICompatible
5556
Dummy
5657
)

relay/channeltype/url.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ var ChannelBaseURLs = []string{
5252
"https://spark-api-open.xf-yun.com", // 48
5353
"https://dashscope.aliyuncs.com", // 49
5454
"", // 50
55+
56+
"https://generativelanguage.googleapis.com/v1beta/openai/", // 51
5557
}
5658

5759
func init() {

web/default/src/constants/channel.constants.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,18 @@ export const CHANNEL_OPTIONS = [
77
color: 'olive',
88
description: 'OpenAI 兼容渠道,支持设置 Base URL',
99
},
10-
{ key: 14, text: 'Anthropic Claude', value: 14, color: 'black' },
10+
{key: 14, text: 'Anthropic', value: 14, color: 'black'},
1111
{ key: 33, text: 'AWS', value: 33, color: 'black' },
12-
{ key: 3, text: 'Azure OpenAI', value: 3, color: 'olive' },
13-
{ key: 11, text: 'Google PaLM2', value: 11, color: 'orange' },
14-
{ key: 24, text: 'Google Gemini', value: 24, color: 'orange' },
12+
{key: 3, text: 'Azure', value: 3, color: 'olive'},
13+
{key: 11, text: 'PaLM2', value: 11, color: 'orange'},
14+
{key: 24, text: 'Gemini', value: 24, color: 'orange'},
15+
{
16+
key: 51,
17+
text: 'Gemini (OpenAI)',
18+
value: 51,
19+
color: 'orange',
20+
description: 'Gemini OpenAI 兼容格式',
21+
},
1522
{ key: 28, text: 'Mistral AI', value: 28, color: 'orange' },
1623
{ key: 41, text: 'Novita', value: 41, color: 'purple' },
1724
{

0 commit comments

Comments
 (0)