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
d33e4c8d
authored
Nov 30, 2025
by
Calcium-Ion
Committed by
GitHub
Nov 30, 2025
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2338 from QuantumNous/revert-2321-pr/gemini-image-edit
Revert "Gemini Image系列支持图像编辑"
parents
907ab6ee
b827d1f7
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 @
d33e4c8d
...
...
@@ -27,8 +27,6 @@ import (
func
SetupApiRequestHeader
(
info
*
common
.
RelayInfo
,
c
*
gin
.
Context
,
req
*
http
.
Header
)
{
if
info
.
RelayMode
==
constant
.
RelayModeAudioTranscription
||
info
.
RelayMode
==
constant
.
RelayModeAudioTranslation
{
// multipart/form-data
}
else
if
info
.
RelayMode
==
constant
.
RelayModeImagesEdits
{
// multipart/form-data
}
else
if
info
.
RelayMode
==
constant
.
RelayModeRealtime
{
// websocket
}
else
{
...
...
relay/channel/gemini/adaptor.go
View file @
d33e4c8d
...
...
@@ -130,29 +130,11 @@ func processSizeParameters(size, quality string) ImageConfig {
}
func
(
a
*
Adaptor
)
ConvertImageRequest
(
c
*
gin
.
Context
,
info
*
relaycommon
.
RelayInfo
,
request
dto
.
ImageRequest
)
(
any
,
error
)
{
if
model_setting
.
IsGeminiModelSupportImagine
(
info
.
UpstreamModelName
)
{
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
}
if
strings
.
HasPrefix
(
info
.
UpstreamModelName
,
"gemini-3-pro-image"
)
{
chatRequest
:=
dto
.
GeneralOpenAIRequest
{
Model
:
request
.
Model
,
Messages
:
[]
dto
.
Message
{
{
Role
:
"user"
,
Content
:
conten
t
},
{
Role
:
"user"
,
Content
:
request
.
Promp
t
},
},
N
:
int
(
request
.
N
),
}
...
...
relay/channel/gemini/relay-gemini.go
View file @
d33e4c8d
...
...
@@ -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
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
{
Contents
:
make
([]
dto
.
GeminiChatContent
,
0
,
len
(
textRequest
.
Messages
)),
...
...
@@ -454,11 +454,10 @@ func CovertOpenAI2Gemini(c *gin.Context, textRequest dto.GeneralOpenAIRequest, i
})
}
}
else
if
part
.
Type
==
dto
.
ContentTypeFile
{
file
:=
part
.
GetFile
()
if
file
.
FileId
!=
""
{
if
part
.
GetFile
()
.
FileId
!=
""
{
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
{
return
nil
,
fmt
.
Errorf
(
"decode base64 file data failed: %s"
,
err
.
Error
())
}
...
...
relay/common/relay_utils.go
View file @
d33e4c8d
package
common
import
(
"encoding/base64"
"errors"
"fmt"
"io"
"net/http"
"strconv"
"strings"
...
...
@@ -229,54 +226,3 @@ func ValidateBasicTaskRequest(c *gin.Context, info *RelayInfo, action string) *d
storeTaskRequest
(
c
,
info
,
action
,
req
)
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 @
d33e4c8d
...
...
@@ -141,7 +141,6 @@ func GetAndValidOpenAIImageRequest(c *gin.Context, relayMode int) (*dto.ImageReq
imageRequest
.
N
=
uint
(
common
.
String2Int
(
formData
.
Get
(
"n"
)))
imageRequest
.
Quality
=
formData
.
Get
(
"quality"
)
imageRequest
.
Size
=
formData
.
Get
(
"size"
)
imageRequest
.
ResponseFormat
=
formData
.
Get
(
"response_format"
)
if
imageValue
:=
formData
.
Get
(
"image"
);
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