Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
new-api
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
b827d1f7
authored
Nov 30, 2025
by
Seefs
Committed by
GitHub
Nov 30, 2025
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "Gemini Image系列支持图像编辑"
parent
10543789
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
5 additions
and
81 deletions
+5
-81
relay/channel/api_request.go
+0
-2
relay/channel/gemini/adaptor.go
+2
-20
relay/channel/gemini/relay-gemini.go
+3
-4
relay/common/relay_utils.go
+0
-54
relay/helper/valid_request.go
+0
-1
No files found.
relay/channel/api_request.go
View file @
b827d1f7
...
@@ -27,8 +27,6 @@ import (
...
@@ -27,8 +27,6 @@ import (
func
SetupApiRequestHeader
(
info
*
common
.
RelayInfo
,
c
*
gin
.
Context
,
req
*
http
.
Header
)
{
func
SetupApiRequestHeader
(
info
*
common
.
RelayInfo
,
c
*
gin
.
Context
,
req
*
http
.
Header
)
{
if
info
.
RelayMode
==
constant
.
RelayModeAudioTranscription
||
info
.
RelayMode
==
constant
.
RelayModeAudioTranslation
{
if
info
.
RelayMode
==
constant
.
RelayModeAudioTranscription
||
info
.
RelayMode
==
constant
.
RelayModeAudioTranslation
{
// multipart/form-data
// multipart/form-data
}
else
if
info
.
RelayMode
==
constant
.
RelayModeImagesEdits
{
// multipart/form-data
}
else
if
info
.
RelayMode
==
constant
.
RelayModeRealtime
{
}
else
if
info
.
RelayMode
==
constant
.
RelayModeRealtime
{
// websocket
// websocket
}
else
{
}
else
{
...
...
relay/channel/gemini/adaptor.go
View file @
b827d1f7
...
@@ -143,29 +143,11 @@ func processSizeParameters(size, quality string) ImageConfig {
...
@@ -143,29 +143,11 @@ func processSizeParameters(size, quality string) ImageConfig {
}
}
func
(
a
*
Adaptor
)
ConvertImageRequest
(
c
*
gin
.
Context
,
info
*
relaycommon
.
RelayInfo
,
request
dto
.
ImageRequest
)
(
any
,
error
)
{
func
(
a
*
Adaptor
)
ConvertImageRequest
(
c
*
gin
.
Context
,
info
*
relaycommon
.
RelayInfo
,
request
dto
.
ImageRequest
)
(
any
,
error
)
{
if
model_setting
.
IsGeminiModelSupportImagine
(
info
.
UpstreamModelName
)
{
if
strings
.
HasPrefix
(
info
.
UpstreamModelName
,
"gemini-3-pro-image"
)
{
var
content
any
if
base64Data
,
err
:=
relaycommon
.
GetImageBase64sFromForm
(
c
);
err
==
nil
{
content
=
[]
any
{
dto
.
MediaContent
{
Type
:
dto
.
ContentTypeText
,
Text
:
request
.
Prompt
,
},
dto
.
MediaContent
{
Type
:
dto
.
ContentTypeFile
,
File
:
&
dto
.
MessageFile
{
FileData
:
base64Data
.
String
(),
},
},
}
}
else
{
content
=
request
.
Prompt
}
chatRequest
:=
dto
.
GeneralOpenAIRequest
{
chatRequest
:=
dto
.
GeneralOpenAIRequest
{
Model
:
request
.
Model
,
Model
:
request
.
Model
,
Messages
:
[]
dto
.
Message
{
Messages
:
[]
dto
.
Message
{
{
Role
:
"user"
,
Content
:
conten
t
},
{
Role
:
"user"
,
Content
:
request
.
Promp
t
},
},
},
N
:
int
(
request
.
N
),
N
:
int
(
request
.
N
),
}
}
...
...
relay/channel/gemini/relay-gemini.go
View file @
b827d1f7
...
@@ -183,7 +183,7 @@ func ThinkingAdaptor(geminiRequest *dto.GeminiChatRequest, info *relaycommon.Rel
...
@@ -183,7 +183,7 @@ func ThinkingAdaptor(geminiRequest *dto.GeminiChatRequest, info *relaycommon.Rel
}
}
// Setting safety to the lowest possible values since Gemini is already powerless enough
// Setting safety to the lowest possible values since Gemini is already powerless enough
func
CovertOpenAI2Gemini
(
c
*
gin
.
Context
,
textRequest
dto
.
GeneralOpenAIRequest
,
info
*
relaycommon
.
RelayInfo
,
base64Data
...*
relaycommon
.
Base64Data
)
(
*
dto
.
GeminiChatRequest
,
error
)
{
func
CovertOpenAI2Gemini
(
c
*
gin
.
Context
,
textRequest
dto
.
GeneralOpenAIRequest
,
info
*
relaycommon
.
RelayInfo
)
(
*
dto
.
GeminiChatRequest
,
error
)
{
geminiRequest
:=
dto
.
GeminiChatRequest
{
geminiRequest
:=
dto
.
GeminiChatRequest
{
Contents
:
make
([]
dto
.
GeminiChatContent
,
0
,
len
(
textRequest
.
Messages
)),
Contents
:
make
([]
dto
.
GeminiChatContent
,
0
,
len
(
textRequest
.
Messages
)),
...
@@ -464,11 +464,10 @@ func CovertOpenAI2Gemini(c *gin.Context, textRequest dto.GeneralOpenAIRequest, i
...
@@ -464,11 +464,10 @@ func CovertOpenAI2Gemini(c *gin.Context, textRequest dto.GeneralOpenAIRequest, i
})
})
}
}
}
else
if
part
.
Type
==
dto
.
ContentTypeFile
{
}
else
if
part
.
Type
==
dto
.
ContentTypeFile
{
file
:=
part
.
GetFile
()
if
part
.
GetFile
()
.
FileId
!=
""
{
if
file
.
FileId
!=
""
{
return
nil
,
fmt
.
Errorf
(
"only base64 file is supported in gemini"
)
return
nil
,
fmt
.
Errorf
(
"only base64 file is supported in gemini"
)
}
}
format
,
base64String
,
err
:=
service
.
DecodeBase64FileData
(
file
.
FileData
)
format
,
base64String
,
err
:=
service
.
DecodeBase64FileData
(
part
.
GetFile
()
.
FileData
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"decode base64 file data failed: %s"
,
err
.
Error
())
return
nil
,
fmt
.
Errorf
(
"decode base64 file data failed: %s"
,
err
.
Error
())
}
}
...
...
relay/common/relay_utils.go
View file @
b827d1f7
package
common
package
common
import
(
import
(
"encoding/base64"
"errors"
"fmt"
"fmt"
"io"
"net/http"
"net/http"
"strconv"
"strconv"
"strings"
"strings"
...
@@ -229,54 +226,3 @@ func ValidateBasicTaskRequest(c *gin.Context, info *RelayInfo, action string) *d
...
@@ -229,54 +226,3 @@ func ValidateBasicTaskRequest(c *gin.Context, info *RelayInfo, action string) *d
storeTaskRequest
(
c
,
info
,
action
,
req
)
storeTaskRequest
(
c
,
info
,
action
,
req
)
return
nil
return
nil
}
}
func
GetImagesBase64sFromForm
(
c
*
gin
.
Context
)
([]
*
Base64Data
,
error
)
{
return
GetBase64sFromForm
(
c
,
"image"
)
}
func
GetImageBase64sFromForm
(
c
*
gin
.
Context
)
(
*
Base64Data
,
error
)
{
base64s
,
err
:=
GetImagesBase64sFromForm
(
c
)
if
err
!=
nil
{
return
nil
,
err
}
return
base64s
[
0
],
nil
}
type
Base64Data
struct
{
MimeType
string
Data
string
}
func
(
m
Base64Data
)
String
()
string
{
return
fmt
.
Sprintf
(
"data:%s;base64,%s"
,
m
.
MimeType
,
m
.
Data
)
}
func
GetBase64sFromForm
(
c
*
gin
.
Context
,
fieldName
string
)
([]
*
Base64Data
,
error
)
{
mf
:=
c
.
Request
.
MultipartForm
if
mf
==
nil
{
if
_
,
err
:=
c
.
MultipartForm
();
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to parse image edit form request: %w"
,
err
)
}
mf
=
c
.
Request
.
MultipartForm
}
imageFiles
,
exists
:=
mf
.
File
[
fieldName
]
if
!
exists
||
len
(
imageFiles
)
==
0
{
return
nil
,
errors
.
New
(
"field "
+
fieldName
+
" is not found or empty"
)
}
var
imageBase64s
[]
*
Base64Data
for
_
,
file
:=
range
imageFiles
{
image
,
err
:=
file
.
Open
()
if
err
!=
nil
{
return
nil
,
errors
.
New
(
"failed to open image file"
)
}
defer
image
.
Close
()
imageData
,
err
:=
io
.
ReadAll
(
image
)
if
err
!=
nil
{
return
nil
,
errors
.
New
(
"failed to read image file"
)
}
mimeType
:=
http
.
DetectContentType
(
imageData
)
base64Data
:=
base64
.
StdEncoding
.
EncodeToString
(
imageData
)
imageBase64s
=
append
(
imageBase64s
,
&
Base64Data
{
MimeType
:
mimeType
,
Data
:
base64Data
,
})
}
return
imageBase64s
,
nil
}
relay/helper/valid_request.go
View file @
b827d1f7
...
@@ -141,7 +141,6 @@ func GetAndValidOpenAIImageRequest(c *gin.Context, relayMode int) (*dto.ImageReq
...
@@ -141,7 +141,6 @@ func GetAndValidOpenAIImageRequest(c *gin.Context, relayMode int) (*dto.ImageReq
imageRequest
.
N
=
uint
(
common
.
String2Int
(
formData
.
Get
(
"n"
)))
imageRequest
.
N
=
uint
(
common
.
String2Int
(
formData
.
Get
(
"n"
)))
imageRequest
.
Quality
=
formData
.
Get
(
"quality"
)
imageRequest
.
Quality
=
formData
.
Get
(
"quality"
)
imageRequest
.
Size
=
formData
.
Get
(
"size"
)
imageRequest
.
Size
=
formData
.
Get
(
"size"
)
imageRequest
.
ResponseFormat
=
formData
.
Get
(
"response_format"
)
if
imageValue
:=
formData
.
Get
(
"image"
);
imageValue
!=
""
{
if
imageValue
:=
formData
.
Get
(
"image"
);
imageValue
!=
""
{
imageRequest
.
Image
,
_
=
json
.
Marshal
(
imageValue
)
imageRequest
.
Image
,
_
=
json
.
Marshal
(
imageValue
)
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment