Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
陈曦
sub2api
Commits
6ad333d6
Commit
6ad333d6
authored
Apr 22, 2026
by
lucas morgan
Browse files
fix(openai): 修复生图服务 lint 问题
- 移除不安全的类型断言用法 - 补齐响应体关闭与字符串拼接的 lint 问题 - 按 staticcheck 建议简化选择器与条件表达式
parent
c5480219
Changes
1
Hide whitespace changes
Inline
Side-by-side
backend/internal/service/openai_images.go
View file @
6ad333d6
...
...
@@ -831,8 +831,8 @@ func (s *OpenAIGatewayService) forwardOpenAIImagesOAuth(
return
nil
,
fmt
.
Errorf
(
"openai image conversation request failed: %w"
,
err
)
}
defer
func
()
{
if
resp
.
Response
!=
nil
&&
resp
.
Response
.
Body
!=
nil
{
_
=
resp
.
Response
.
Body
.
Close
()
if
resp
!=
nil
&&
resp
.
Body
!=
nil
{
_
=
resp
.
Body
.
Close
()
}
}()
if
resp
.
StatusCode
>=
400
{
...
...
@@ -969,9 +969,9 @@ func bootstrapOpenAIBackendAPI(ctx context.Context, client *req.Client, headers
if
err
!=
nil
{
return
err
}
if
resp
.
Response
!=
nil
&&
resp
.
Response
.
Body
!=
nil
{
_
,
_
=
io
.
Copy
(
io
.
Discard
,
resp
.
Response
.
Body
)
_
=
resp
.
Response
.
Body
.
Close
()
if
resp
!=
nil
&&
resp
.
Body
!=
nil
{
_
,
_
=
io
.
Copy
(
io
.
Discard
,
resp
.
Body
)
_
=
resp
.
Body
.
Close
()
}
return
nil
}
...
...
@@ -1118,8 +1118,9 @@ func uploadOpenAIImageFiles(ctx context.Context, client *req.Client, headers htt
results
:=
make
([]
openAIUploadedImage
,
0
,
len
(
uploads
))
for
i
:=
range
uploads
{
item
:=
uploads
[
i
]
fileName
:=
coalesceOpenAIFileName
(
item
.
FileName
,
"image.png"
)
payload
:=
map
[
string
]
any
{
"file_name"
:
coalesceOpenAIFileName
(
item
.
FileName
,
"image.png"
)
,
"file_name"
:
fileName
,
"file_size"
:
len
(
item
.
Data
),
"use_case"
:
"multimodal"
,
}
...
...
@@ -1178,7 +1179,7 @@ func uploadOpenAIImageFiles(ctx context.Context, client *req.Client, headers htt
results
=
append
(
results
,
openAIUploadedImage
{
FileID
:
created
.
FileID
,
FileName
:
payload
[
"
file
_n
ame
"
]
.
(
string
)
,
FileName
:
file
N
ame
,
FileSize
:
len
(
item
.
Data
),
MimeType
:
coalesceOpenAIFileName
(
item
.
ContentType
,
"application/octet-stream"
),
Width
:
item
.
Width
,
...
...
@@ -1230,6 +1231,15 @@ func buildOpenAIImageConversationRequest(parsed *OpenAIImagesRequest, parentMess
if
len
(
uploads
)
>
0
{
contentType
=
"multimodal_text"
}
metadata
:=
map
[
string
]
any
{
"developer_mode_connector_ids"
:
[]
any
{},
"selected_github_repos"
:
[]
any
{},
"selected_all_github_repos"
:
false
,
"system_hints"
:
[]
string
{
"picture_v2"
},
"serialization_metadata"
:
map
[
string
]
any
{
"custom_symbol_offsets"
:
[]
any
{},
},
}
message
:=
map
[
string
]
any
{
"id"
:
uuid
.
NewString
(),
"author"
:
map
[
string
]
any
{
"role"
:
"user"
},
...
...
@@ -1237,20 +1247,11 @@ func buildOpenAIImageConversationRequest(parsed *OpenAIImagesRequest, parentMess
"content_type"
:
contentType
,
"parts"
:
parts
,
},
"metadata"
:
map
[
string
]
any
{
"developer_mode_connector_ids"
:
[]
any
{},
"selected_github_repos"
:
[]
any
{},
"selected_all_github_repos"
:
false
,
"system_hints"
:
[]
string
{
"picture_v2"
},
"serialization_metadata"
:
map
[
string
]
any
{
"custom_symbol_offsets"
:
[]
any
{},
},
},
"metadata"
:
metadata
,
"create_time"
:
float64
(
time
.
Now
()
.
UnixMilli
())
/
1000
,
}
if
len
(
attachments
)
>
0
{
messageMetadata
:=
message
[
"metadata"
]
.
(
map
[
string
]
any
)
messageMetadata
[
"attachments"
]
=
attachments
metadata
[
"attachments"
]
=
attachments
}
return
map
[
string
]
any
{
...
...
@@ -1371,7 +1372,10 @@ func openAIImagePointerMatches(body []byte) []string {
end
:=
idx
+
len
(
prefix
)
for
end
<
len
(
raw
)
{
ch
:=
raw
[
end
]
if
!
(
ch
==
'-'
||
ch
==
'_'
||
ch
>=
'0'
&&
ch
<=
'9'
||
ch
>=
'a'
&&
ch
<=
'z'
||
ch
>=
'A'
&&
ch
<=
'Z'
)
{
if
ch
!=
'-'
&&
ch
!=
'_'
&&
(
ch
<
'0'
||
ch
>
'9'
)
&&
(
ch
<
'a'
||
ch
>
'z'
)
&&
(
ch
<
'A'
||
ch
>
'Z'
)
{
break
}
end
++
...
...
@@ -1695,14 +1699,14 @@ func downloadOpenAIImageBytes(ctx context.Context, client *req.Client, headers h
return
nil
,
err
}
defer
func
()
{
if
resp
.
Response
!=
nil
&&
resp
.
Response
.
Body
!=
nil
{
_
=
resp
.
Response
.
Body
.
Close
()
if
resp
!=
nil
&&
resp
.
Body
!=
nil
{
_
=
resp
.
Body
.
Close
()
}
}()
if
resp
.
StatusCode
<
200
||
resp
.
StatusCode
>=
300
{
return
nil
,
newOpenAIImageStatusError
(
resp
,
"download image bytes failed"
)
}
return
io
.
ReadAll
(
resp
.
Response
.
Body
)
return
io
.
ReadAll
(
resp
.
Body
)
}
func
handleOpenAIImageBackendError
(
resp
*
req
.
Response
)
error
{
...
...
@@ -1936,16 +1940,8 @@ func generateOpenAIChallengeAnswer(seed string, difficulty string, config []any)
seedBytes
:=
[]
byte
(
seed
)
for
i
:=
0
;
i
<
100000
;
i
++
{
var
builder
bytes
.
Buffer
builder
.
Write
(
p1
)
builder
.
WriteString
(
strconv
.
Itoa
(
i
))
builder
.
WriteString
(
","
)
builder
.
Write
(
p2
)
builder
.
WriteString
(
","
)
builder
.
WriteString
(
strconv
.
Itoa
(
i
>>
1
))
builder
.
WriteString
(
","
)
builder
.
Write
(
p3
)
encoded
:=
base64
.
StdEncoding
.
EncodeToString
(
builder
.
Bytes
())
payload
:=
fmt
.
Sprintf
(
"%s%d,%s,%d,%s"
,
p1
,
i
,
p2
,
i
>>
1
,
p3
)
encoded
:=
base64
.
StdEncoding
.
EncodeToString
([]
byte
(
payload
))
sum
:=
sha3
.
Sum512
(
append
(
seedBytes
,
[]
byte
(
encoded
)
...
))
if
bytes
.
Compare
(
sum
[
:
len
(
diffBytes
)],
diffBytes
)
<=
0
{
return
encoded
,
true
...
...
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