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
9390cbee
authored
Jun 04, 2025
by
RedwindA
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
支持Gemini inline_data的蛇形命名法
parent
b90aa227
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
53 additions
and
0 deletions
+53
-0
relay/channel/gemini/dto.go
+53
-0
No files found.
relay/channel/gemini/dto.go
View file @
9390cbee
package
gemini
package
gemini
import
"encoding/json"
type
GeminiChatRequest
struct
{
type
GeminiChatRequest
struct
{
Contents
[]
GeminiChatContent
`json:"contents"`
Contents
[]
GeminiChatContent
`json:"contents"`
SafetySettings
[]
GeminiChatSafetySettings
`json:"safetySettings,omitempty"`
SafetySettings
[]
GeminiChatSafetySettings
`json:"safetySettings,omitempty"`
...
@@ -22,6 +24,30 @@ type GeminiInlineData struct {
...
@@ -22,6 +24,30 @@ type GeminiInlineData struct {
Data
string
`json:"data"`
Data
string
`json:"data"`
}
}
// UnmarshalJSON custom unmarshaler for GeminiInlineData to support snake_case and camelCase for MimeType
func
(
g
*
GeminiInlineData
)
UnmarshalJSON
(
data
[]
byte
)
error
{
type
Alias
GeminiInlineData
// Use type alias to avoid recursion
var
aux
struct
{
Alias
MimeTypeSnake
string
`json:"mime_type"`
}
if
err
:=
json
.
Unmarshal
(
data
,
&
aux
);
err
!=
nil
{
return
err
}
*
g
=
GeminiInlineData
(
aux
.
Alias
)
// Copy other fields if any in future
// Prioritize snake_case if present
if
aux
.
MimeTypeSnake
!=
""
{
g
.
MimeType
=
aux
.
MimeTypeSnake
}
else
if
aux
.
MimeType
!=
""
{
// Fallback to camelCase from Alias
g
.
MimeType
=
aux
.
MimeType
}
// g.Data would be populated by aux.Alias.Data
return
nil
}
type
FunctionCall
struct
{
type
FunctionCall
struct
{
FunctionName
string
`json:"name"`
FunctionName
string
`json:"name"`
Arguments
any
`json:"args"`
Arguments
any
`json:"args"`
...
@@ -63,6 +89,33 @@ type GeminiPart struct {
...
@@ -63,6 +89,33 @@ type GeminiPart struct {
CodeExecutionResult
*
GeminiPartCodeExecutionResult
`json:"codeExecutionResult,omitempty"`
CodeExecutionResult
*
GeminiPartCodeExecutionResult
`json:"codeExecutionResult,omitempty"`
}
}
// UnmarshalJSON custom unmarshaler for GeminiPart to support snake_case and camelCase for InlineData
func
(
p
*
GeminiPart
)
UnmarshalJSON
(
data
[]
byte
)
error
{
// Alias to avoid recursion during unmarshalling
type
Alias
GeminiPart
var
aux
struct
{
Alias
InlineDataSnake
*
GeminiInlineData
`json:"inline_data,omitempty"`
// snake_case variant
}
if
err
:=
json
.
Unmarshal
(
data
,
&
aux
);
err
!=
nil
{
return
err
}
// Assign fields from alias
*
p
=
GeminiPart
(
aux
.
Alias
)
// Prioritize snake_case for InlineData if present
if
aux
.
InlineDataSnake
!=
nil
{
p
.
InlineData
=
aux
.
InlineDataSnake
}
else
if
aux
.
InlineData
!=
nil
{
// Fallback to camelCase from Alias
p
.
InlineData
=
aux
.
InlineData
}
// Other fields like Text, FunctionCall etc. are already populated via aux.Alias
return
nil
}
type
GeminiChatContent
struct
{
type
GeminiChatContent
struct
{
Role
string
`json:"role,omitempty"`
Role
string
`json:"role,omitempty"`
Parts
[]
GeminiPart
`json:"parts"`
Parts
[]
GeminiPart
`json:"parts"`
...
...
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