mirror of
				https://github.com/songquanpeng/one-api.git
				synced 2025-11-04 07:43:41 +08:00 
			
		
		
		
	feat: support Gemini openai compatible api
This commit is contained in:
		@@ -1,18 +1,12 @@
 | 
			
		||||
package gemini
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/adaptor/geminiv2"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// https://ai.google.dev/models/gemini
 | 
			
		||||
 | 
			
		||||
var ModelList = []string{
 | 
			
		||||
	"gemini-pro", "gemini-1.0-pro",
 | 
			
		||||
	// "gemma-2-2b-it", "gemma-2-9b-it", "gemma-2-27b-it",
 | 
			
		||||
	"gemini-1.5-flash", "gemini-1.5-flash-8b",
 | 
			
		||||
	"gemini-1.5-pro", "gemini-1.5-pro-experimental",
 | 
			
		||||
	"text-embedding-004", "aqa",
 | 
			
		||||
	"gemini-2.0-flash", "gemini-2.0-flash-exp",
 | 
			
		||||
	"gemini-2.0-flash-lite-preview-02-05",
 | 
			
		||||
	"gemini-2.0-flash-thinking-exp-01-21",
 | 
			
		||||
	"gemini-2.0-pro-exp-02-05",
 | 
			
		||||
}
 | 
			
		||||
var ModelList = geminiv2.ModelList
 | 
			
		||||
 | 
			
		||||
// ModelsSupportSystemInstruction is the list of models that support system instruction.
 | 
			
		||||
//
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								relay/adaptor/geminiv2/constants.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								relay/adaptor/geminiv2/constants.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
package geminiv2
 | 
			
		||||
 | 
			
		||||
// https://ai.google.dev/models/gemini
 | 
			
		||||
 | 
			
		||||
var ModelList = []string{
 | 
			
		||||
	"gemini-pro", "gemini-1.0-pro",
 | 
			
		||||
	// "gemma-2-2b-it", "gemma-2-9b-it", "gemma-2-27b-it",
 | 
			
		||||
	"gemini-1.5-flash", "gemini-1.5-flash-8b",
 | 
			
		||||
	"gemini-1.5-pro", "gemini-1.5-pro-experimental",
 | 
			
		||||
	"text-embedding-004", "aqa",
 | 
			
		||||
	"gemini-2.0-flash", "gemini-2.0-flash-exp",
 | 
			
		||||
	"gemini-2.0-flash-lite-preview-02-05",
 | 
			
		||||
	"gemini-2.0-flash-thinking-exp-01-21",
 | 
			
		||||
	"gemini-2.0-pro-exp-02-05",
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								relay/adaptor/geminiv2/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								relay/adaptor/geminiv2/main.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
package geminiv2
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func GetRequestURL(meta *meta.Meta) (string, error) {
 | 
			
		||||
	baseURL := strings.TrimSuffix(meta.BaseURL, "/")
 | 
			
		||||
	requestPath := strings.TrimPrefix(meta.RequestURLPath, "/v1")
 | 
			
		||||
	return fmt.Sprintf("%s%s", baseURL, requestPath), nil
 | 
			
		||||
}
 | 
			
		||||
@@ -13,6 +13,7 @@ import (
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/adaptor/alibailian"
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/adaptor/baiduv2"
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/adaptor/doubao"
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/adaptor/geminiv2"
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/adaptor/minimax"
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/adaptor/novita"
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/channeltype"
 | 
			
		||||
@@ -59,6 +60,8 @@ func (a *Adaptor) GetRequestURL(meta *meta.Meta) (string, error) {
 | 
			
		||||
		return baiduv2.GetRequestURL(meta)
 | 
			
		||||
	case channeltype.AliBailian:
 | 
			
		||||
		return alibailian.GetRequestURL(meta)
 | 
			
		||||
	case channeltype.GeminiOpenAICompatible:
 | 
			
		||||
		return geminiv2.GetRequestURL(meta)
 | 
			
		||||
	default:
 | 
			
		||||
		return GetFullRequestURL(meta.BaseURL, meta.RequestURLPath, meta.ChannelType), nil
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ import (
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/adaptor/baiduv2"
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/adaptor/deepseek"
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/adaptor/doubao"
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/adaptor/geminiv2"
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/adaptor/groq"
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/adaptor/lingyiwanwu"
 | 
			
		||||
	"github.com/songquanpeng/one-api/relay/adaptor/minimax"
 | 
			
		||||
@@ -82,6 +83,8 @@ func GetCompatibleChannelMeta(channelType int) (string, []string) {
 | 
			
		||||
		return "openrouter", openrouter.ModelList
 | 
			
		||||
	case channeltype.AliBailian:
 | 
			
		||||
		return "alibailian", alibailian.ModelList
 | 
			
		||||
	case channeltype.GeminiOpenAICompatible:
 | 
			
		||||
		return "geminiv2", geminiv2.ModelList
 | 
			
		||||
	default:
 | 
			
		||||
		return "openai", ModelList
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -52,5 +52,6 @@ const (
 | 
			
		||||
	XunfeiV2
 | 
			
		||||
	AliBailian
 | 
			
		||||
	OpenAICompatible
 | 
			
		||||
	GeminiOpenAICompatible
 | 
			
		||||
	Dummy
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -52,6 +52,8 @@ var ChannelBaseURLs = []string{
 | 
			
		||||
	"https://spark-api-open.xf-yun.com",         // 48
 | 
			
		||||
	"https://dashscope.aliyuncs.com",            // 49
 | 
			
		||||
	"",                                          // 50
 | 
			
		||||
 | 
			
		||||
	"https://generativelanguage.googleapis.com/v1beta/openai/", // 51
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,11 +7,18 @@ export const CHANNEL_OPTIONS = [
 | 
			
		||||
    color: 'olive',
 | 
			
		||||
    description: 'OpenAI 兼容渠道,支持设置 Base URL',
 | 
			
		||||
  },
 | 
			
		||||
  { key: 14, text: 'Anthropic Claude', value: 14, color: 'black' },
 | 
			
		||||
  {key: 14, text: 'Anthropic', value: 14, color: 'black'},
 | 
			
		||||
  { key: 33, text: 'AWS', value: 33, color: 'black' },
 | 
			
		||||
  { key: 3, text: 'Azure OpenAI', value: 3, color: 'olive' },
 | 
			
		||||
  { key: 11, text: 'Google PaLM2', value: 11, color: 'orange' },
 | 
			
		||||
  { key: 24, text: 'Google Gemini', value: 24, color: 'orange' },
 | 
			
		||||
  {key: 3, text: 'Azure', value: 3, color: 'olive'},
 | 
			
		||||
  {key: 11, text: 'PaLM2', value: 11, color: 'orange'},
 | 
			
		||||
  {key: 24, text: 'Gemini', value: 24, color: 'orange'},
 | 
			
		||||
  {
 | 
			
		||||
    key: 51,
 | 
			
		||||
    text: 'Gemini (OpenAI)',
 | 
			
		||||
    value: 51,
 | 
			
		||||
    color: 'orange',
 | 
			
		||||
    description: 'Gemini OpenAI 兼容格式',
 | 
			
		||||
  },
 | 
			
		||||
  { key: 28, text: 'Mistral AI', value: 28, color: 'orange' },
 | 
			
		||||
  { key: 41, text: 'Novita', value: 41, color: 'purple' },
 | 
			
		||||
  {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user