修复 Gemini 兼容平台版本路径重复拼接 #19
@@ -1558,10 +1558,39 @@ func TestGeminiClientChatConvertsFunctionCallResponse(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGeminiURLAcceptsVersionedBaseURL(t *testing.T) {
|
||||
got := geminiURL("https://generativelanguage.googleapis.com/v1beta", "gemini-2.5-flash", "test-key")
|
||||
want := "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=test-key"
|
||||
if got != want {
|
||||
t.Fatalf("unexpected gemini url: %s", got)
|
||||
tests := []struct {
|
||||
name string
|
||||
baseURL string
|
||||
want string
|
||||
}{
|
||||
{
|
||||
name: "default version",
|
||||
baseURL: "https://generativelanguage.googleapis.com",
|
||||
want: "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=test-key",
|
||||
},
|
||||
{
|
||||
name: "google beta version",
|
||||
baseURL: "https://generativelanguage.googleapis.com/v1beta",
|
||||
want: "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=test-key",
|
||||
},
|
||||
{
|
||||
name: "compatible v1 endpoint",
|
||||
baseURL: "https://cloud.dataeyes.ai/v1",
|
||||
want: "https://cloud.dataeyes.ai/v1/models/gemini-2.5-flash:generateContent?key=test-key",
|
||||
},
|
||||
{
|
||||
name: "openai suffix after version",
|
||||
baseURL: "https://generativelanguage.googleapis.com/v1beta/openai",
|
||||
want: "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=test-key",
|
||||
},
|
||||
}
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
got := geminiURL(test.baseURL, "gemini-2.5-flash", "test-key")
|
||||
if got != test.want {
|
||||
t.Fatalf("unexpected gemini url: %s", got)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -61,11 +61,13 @@ func geminiURL(baseURL string, model string, apiKey string) string {
|
||||
base = "https://generativelanguage.googleapis.com"
|
||||
}
|
||||
base = strings.TrimSuffix(base, "/openai")
|
||||
if strings.HasSuffix(base, "/v1beta") {
|
||||
base = strings.TrimSuffix(base, "/v1beta")
|
||||
if !strings.HasSuffix(base, "/v1") &&
|
||||
!strings.HasSuffix(base, "/v1beta") &&
|
||||
!strings.HasSuffix(base, "/v1alpha") {
|
||||
base += "/v1beta"
|
||||
}
|
||||
escapedModel := url.PathEscape(model)
|
||||
return fmt.Sprintf("%s/v1beta/models/%s:generateContent?key=%s", base, escapedModel, url.QueryEscape(apiKey))
|
||||
return fmt.Sprintf("%s/models/%s:generateContent?key=%s", base, escapedModel, url.QueryEscape(apiKey))
|
||||
}
|
||||
|
||||
func geminiBody(request Request) map[string]any {
|
||||
|
||||
Reference in New Issue
Block a user