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
2db71673
authored
Jul 30, 2025
by
CaIon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: auto ban
parent
efb7c6a1
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
99 additions
and
94 deletions
+99
-94
relay/channel/ali/image.go
+2
-2
relay/channel/ali/rerank.go
+2
-2
relay/channel/ali/text.go
+3
-3
relay/channel/gemini/adaptor.go
+0
-56
relay/channel/gemini/relay-gemini.go
+60
-6
relay/channel/jimeng/image.go
+2
-2
relay/channel/openai/relay-openai.go
+6
-6
relay/channel/openai/relay_responses.go
+2
-2
relay/channel/palm/relay-palm.go
+2
-2
relay/channel/siliconflow/relay-siliconflow.go
+2
-2
relay/channel/tencent/relay-tencent.go
+2
-2
relay/channel/vertex/adaptor.go
+10
-2
relay/channel/zhipu/relay-zhipu.go
+2
-2
relay/common_handler/rerank.go
+3
-3
relay/gemini_handler.go
+1
-2
No files found.
relay/channel/ali/image.go
View file @
2db71673
...
...
@@ -132,12 +132,12 @@ func aliImageHandler(c *gin.Context, resp *http.Response, info *relaycommon.Rela
var
aliTaskResponse
AliResponse
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
return
types
.
New
Error
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
),
nil
return
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
,
http
.
StatusInternalServerError
),
nil
}
common
.
CloseResponseBodyGracefully
(
resp
)
err
=
json
.
Unmarshal
(
responseBody
,
&
aliTaskResponse
)
if
err
!=
nil
{
return
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
),
nil
return
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
),
nil
}
if
aliTaskResponse
.
Message
!=
""
{
...
...
relay/channel/ali/rerank.go
View file @
2db71673
...
...
@@ -34,14 +34,14 @@ func ConvertRerankRequest(request dto.RerankRequest) *AliRerankRequest {
func
RerankHandler
(
c
*
gin
.
Context
,
resp
*
http
.
Response
,
info
*
relaycommon
.
RelayInfo
)
(
*
types
.
NewAPIError
,
*
dto
.
Usage
)
{
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
return
types
.
New
Error
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
),
nil
return
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
,
http
.
StatusInternalServerError
),
nil
}
common
.
CloseResponseBodyGracefully
(
resp
)
var
aliResponse
AliRerankResponse
err
=
json
.
Unmarshal
(
responseBody
,
&
aliResponse
)
if
err
!=
nil
{
return
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
),
nil
return
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
),
nil
}
if
aliResponse
.
Code
!=
""
{
...
...
relay/channel/ali/text.go
View file @
2db71673
...
...
@@ -43,7 +43,7 @@ func aliEmbeddingHandler(c *gin.Context, resp *http.Response) (*types.NewAPIErro
var
fullTextResponse
dto
.
FlexibleEmbeddingResponse
err
:=
json
.
NewDecoder
(
resp
.
Body
)
.
Decode
(
&
fullTextResponse
)
if
err
!=
nil
{
return
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
),
nil
return
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
),
nil
}
common
.
CloseResponseBodyGracefully
(
resp
)
...
...
@@ -179,12 +179,12 @@ func aliHandler(c *gin.Context, resp *http.Response) (*types.NewAPIError, *dto.U
var
aliResponse
AliResponse
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
return
types
.
New
Error
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
),
nil
return
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
,
http
.
StatusInternalServerError
),
nil
}
common
.
CloseResponseBodyGracefully
(
resp
)
err
=
json
.
Unmarshal
(
responseBody
,
&
aliResponse
)
if
err
!=
nil
{
return
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
),
nil
return
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
),
nil
}
if
aliResponse
.
Code
!=
""
{
return
types
.
WithOpenAIError
(
types
.
OpenAIError
{
...
...
relay/channel/gemini/adaptor.go
View file @
2db71673
package
gemini
import
(
"encoding/json"
"errors"
"fmt"
"io"
"net/http"
"one-api/common"
"one-api/dto"
"one-api/relay/channel"
"one-api/relay/channel/openai"
...
...
@@ -212,60 +210,6 @@ func (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, info *relaycom
return
nil
,
types
.
NewError
(
errors
.
New
(
"not implemented"
),
types
.
ErrorCodeBadResponseBody
)
}
func
GeminiImageHandler
(
c
*
gin
.
Context
,
info
*
relaycommon
.
RelayInfo
,
resp
*
http
.
Response
)
(
*
dto
.
Usage
,
*
types
.
NewAPIError
)
{
responseBody
,
readErr
:=
io
.
ReadAll
(
resp
.
Body
)
if
readErr
!=
nil
{
return
nil
,
types
.
NewError
(
readErr
,
types
.
ErrorCodeBadResponseBody
)
}
_
=
resp
.
Body
.
Close
()
var
geminiResponse
GeminiImageResponse
if
jsonErr
:=
json
.
Unmarshal
(
responseBody
,
&
geminiResponse
);
jsonErr
!=
nil
{
return
nil
,
types
.
NewError
(
jsonErr
,
types
.
ErrorCodeBadResponseBody
)
}
if
len
(
geminiResponse
.
Predictions
)
==
0
{
return
nil
,
types
.
NewError
(
errors
.
New
(
"no images generated"
),
types
.
ErrorCodeBadResponseBody
)
}
// convert to openai format response
openAIResponse
:=
dto
.
ImageResponse
{
Created
:
common
.
GetTimestamp
(),
Data
:
make
([]
dto
.
ImageData
,
0
,
len
(
geminiResponse
.
Predictions
)),
}
for
_
,
prediction
:=
range
geminiResponse
.
Predictions
{
if
prediction
.
RaiFilteredReason
!=
""
{
continue
// skip filtered image
}
openAIResponse
.
Data
=
append
(
openAIResponse
.
Data
,
dto
.
ImageData
{
B64Json
:
prediction
.
BytesBase64Encoded
,
})
}
jsonResponse
,
jsonErr
:=
json
.
Marshal
(
openAIResponse
)
if
jsonErr
!=
nil
{
return
nil
,
types
.
NewError
(
jsonErr
,
types
.
ErrorCodeBadResponseBody
)
}
c
.
Writer
.
Header
()
.
Set
(
"Content-Type"
,
"application/json"
)
c
.
Writer
.
WriteHeader
(
resp
.
StatusCode
)
_
,
_
=
c
.
Writer
.
Write
(
jsonResponse
)
// https://github.com/google-gemini/cookbook/blob/719a27d752aac33f39de18a8d3cb42a70874917e/quickstarts/Counting_Tokens.ipynb
// each image has fixed 258 tokens
const
imageTokens
=
258
generatedImages
:=
len
(
openAIResponse
.
Data
)
usage
:=
&
dto
.
Usage
{
PromptTokens
:
imageTokens
*
generatedImages
,
// each generated image has fixed 258 tokens
CompletionTokens
:
0
,
// image generation does not calculate completion tokens
TotalTokens
:
imageTokens
*
generatedImages
,
}
return
usage
,
nil
}
func
(
a
*
Adaptor
)
GetModelList
()
[]
string
{
return
ModelList
}
...
...
relay/channel/gemini/relay-gemini.go
View file @
2db71673
...
...
@@ -907,7 +907,7 @@ func GeminiChatStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *
func
GeminiChatHandler
(
c
*
gin
.
Context
,
info
*
relaycommon
.
RelayInfo
,
resp
*
http
.
Response
)
(
*
dto
.
Usage
,
*
types
.
NewAPIError
)
{
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
common
.
CloseResponseBodyGracefully
(
resp
)
if
common
.
DebugEnabled
{
...
...
@@ -916,10 +916,10 @@ func GeminiChatHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http.R
var
geminiResponse
GeminiChatResponse
err
=
common
.
Unmarshal
(
responseBody
,
&
geminiResponse
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
if
len
(
geminiResponse
.
Candidates
)
==
0
{
return
nil
,
types
.
New
Error
(
errors
.
New
(
"no candidates returned"
),
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
errors
.
New
(
"no candidates returned"
),
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
fullTextResponse
:=
responseGeminiChat2OpenAI
(
c
,
&
geminiResponse
)
fullTextResponse
.
Model
=
info
.
UpstreamModelName
...
...
@@ -956,12 +956,12 @@ func GeminiEmbeddingHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *h
responseBody
,
readErr
:=
io
.
ReadAll
(
resp
.
Body
)
if
readErr
!=
nil
{
return
nil
,
types
.
New
Error
(
readErr
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
readErr
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
var
geminiResponse
GeminiEmbeddingResponse
if
jsonErr
:=
common
.
Unmarshal
(
responseBody
,
&
geminiResponse
);
jsonErr
!=
nil
{
return
nil
,
types
.
New
Error
(
jsonErr
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
jsonErr
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
// convert to openai format response
...
...
@@ -991,9 +991,63 @@ func GeminiEmbeddingHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *h
jsonResponse
,
jsonErr
:=
common
.
Marshal
(
openAIResponse
)
if
jsonErr
!=
nil
{
return
nil
,
types
.
New
Error
(
jsonErr
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
jsonErr
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
common
.
IOCopyBytesGracefully
(
c
,
resp
,
jsonResponse
)
return
usage
,
nil
}
func
GeminiImageHandler
(
c
*
gin
.
Context
,
info
*
relaycommon
.
RelayInfo
,
resp
*
http
.
Response
)
(
*
dto
.
Usage
,
*
types
.
NewAPIError
)
{
responseBody
,
readErr
:=
io
.
ReadAll
(
resp
.
Body
)
if
readErr
!=
nil
{
return
nil
,
types
.
NewOpenAIError
(
readErr
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
_
=
resp
.
Body
.
Close
()
var
geminiResponse
GeminiImageResponse
if
jsonErr
:=
common
.
Unmarshal
(
responseBody
,
&
geminiResponse
);
jsonErr
!=
nil
{
return
nil
,
types
.
NewOpenAIError
(
jsonErr
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
if
len
(
geminiResponse
.
Predictions
)
==
0
{
return
nil
,
types
.
NewOpenAIError
(
errors
.
New
(
"no images generated"
),
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
// convert to openai format response
openAIResponse
:=
dto
.
ImageResponse
{
Created
:
common
.
GetTimestamp
(),
Data
:
make
([]
dto
.
ImageData
,
0
,
len
(
geminiResponse
.
Predictions
)),
}
for
_
,
prediction
:=
range
geminiResponse
.
Predictions
{
if
prediction
.
RaiFilteredReason
!=
""
{
continue
// skip filtered image
}
openAIResponse
.
Data
=
append
(
openAIResponse
.
Data
,
dto
.
ImageData
{
B64Json
:
prediction
.
BytesBase64Encoded
,
})
}
jsonResponse
,
jsonErr
:=
json
.
Marshal
(
openAIResponse
)
if
jsonErr
!=
nil
{
return
nil
,
types
.
NewError
(
jsonErr
,
types
.
ErrorCodeBadResponseBody
)
}
c
.
Writer
.
Header
()
.
Set
(
"Content-Type"
,
"application/json"
)
c
.
Writer
.
WriteHeader
(
resp
.
StatusCode
)
_
,
_
=
c
.
Writer
.
Write
(
jsonResponse
)
// https://github.com/google-gemini/cookbook/blob/719a27d752aac33f39de18a8d3cb42a70874917e/quickstarts/Counting_Tokens.ipynb
// each image has fixed 258 tokens
const
imageTokens
=
258
generatedImages
:=
len
(
openAIResponse
.
Data
)
usage
:=
&
dto
.
Usage
{
PromptTokens
:
imageTokens
*
generatedImages
,
// each generated image has fixed 258 tokens
CompletionTokens
:
0
,
// image generation does not calculate completion tokens
TotalTokens
:
imageTokens
*
generatedImages
,
}
return
usage
,
nil
}
relay/channel/jimeng/image.go
View file @
2db71673
...
...
@@ -52,13 +52,13 @@ func jimengImageHandler(c *gin.Context, resp *http.Response, info *relaycommon.R
var
jimengResponse
ImageResponse
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
,
http
.
StatusInternalServerError
)
}
common
.
CloseResponseBodyGracefully
(
resp
)
err
=
json
.
Unmarshal
(
responseBody
,
&
jimengResponse
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
// Check if the response indicates an error
...
...
relay/channel/openai/relay-openai.go
View file @
2db71673
...
...
@@ -109,7 +109,7 @@ func sendStreamData(c *gin.Context, info *relaycommon.RelayInfo, data string, fo
func
OaiStreamHandler
(
c
*
gin
.
Context
,
info
*
relaycommon
.
RelayInfo
,
resp
*
http
.
Response
)
(
*
dto
.
Usage
,
*
types
.
NewAPIError
)
{
if
resp
==
nil
||
resp
.
Body
==
nil
{
common
.
LogError
(
c
,
"invalid response or response body"
)
return
nil
,
types
.
New
Error
(
fmt
.
Errorf
(
"invalid response"
),
types
.
ErrorCodeBadResponse
)
return
nil
,
types
.
New
OpenAIError
(
fmt
.
Errorf
(
"invalid response"
),
types
.
ErrorCodeBadResponse
,
http
.
StatusInternalServerError
)
}
defer
common
.
CloseResponseBodyGracefully
(
resp
)
...
...
@@ -178,11 +178,11 @@ func OpenaiHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http.Respo
var
simpleResponse
dto
.
OpenAITextResponse
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
,
http
.
StatusInternalServerError
)
}
err
=
common
.
Unmarshal
(
responseBody
,
&
simpleResponse
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
if
simpleResponse
.
Error
!=
nil
&&
simpleResponse
.
Error
.
Type
!=
""
{
return
nil
,
types
.
WithOpenAIError
(
*
simpleResponse
.
Error
,
resp
.
StatusCode
)
...
...
@@ -263,7 +263,7 @@ func OpenaiSTTHandler(c *gin.Context, resp *http.Response, info *relaycommon.Rel
}
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
return
types
.
New
Error
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
),
nil
return
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
,
http
.
StatusInternalServerError
),
nil
}
// 写入新的 response body
common
.
IOCopyBytesGracefully
(
c
,
resp
,
responseBody
)
...
...
@@ -547,13 +547,13 @@ func OpenaiHandlerWithUsage(c *gin.Context, info *relaycommon.RelayInfo, resp *h
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
,
http
.
StatusInternalServerError
)
}
var
usageResp
dto
.
SimpleResponse
err
=
common
.
Unmarshal
(
responseBody
,
&
usageResp
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
// 写入新的 response body
...
...
relay/channel/openai/relay_responses.go
View file @
2db71673
...
...
@@ -22,11 +22,11 @@ func OaiResponsesHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http
var
responsesResponse
dto
.
OpenAIResponsesResponse
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
,
http
.
StatusInternalServerError
)
}
err
=
common
.
Unmarshal
(
responseBody
,
&
responsesResponse
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
if
responsesResponse
.
Error
!=
nil
{
return
nil
,
types
.
WithOpenAIError
(
*
responsesResponse
.
Error
,
resp
.
StatusCode
)
...
...
relay/channel/palm/relay-palm.go
View file @
2db71673
...
...
@@ -127,13 +127,13 @@ func palmStreamHandler(c *gin.Context, resp *http.Response) (*types.NewAPIError,
func
palmHandler
(
c
*
gin
.
Context
,
info
*
relaycommon
.
RelayInfo
,
resp
*
http
.
Response
)
(
*
dto
.
Usage
,
*
types
.
NewAPIError
)
{
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
,
http
.
StatusInternalServerError
)
}
common
.
CloseResponseBodyGracefully
(
resp
)
var
palmResponse
PaLMChatResponse
err
=
json
.
Unmarshal
(
responseBody
,
&
palmResponse
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
if
palmResponse
.
Error
.
Code
!=
0
||
len
(
palmResponse
.
Candidates
)
==
0
{
return
nil
,
types
.
WithOpenAIError
(
types
.
OpenAIError
{
...
...
relay/channel/siliconflow/relay-siliconflow.go
View file @
2db71673
...
...
@@ -15,13 +15,13 @@ import (
func
siliconflowRerankHandler
(
c
*
gin
.
Context
,
info
*
relaycommon
.
RelayInfo
,
resp
*
http
.
Response
)
(
*
dto
.
Usage
,
*
types
.
NewAPIError
)
{
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
,
http
.
StatusInternalServerError
)
}
common
.
CloseResponseBodyGracefully
(
resp
)
var
siliconflowResp
SFRerankResponse
err
=
json
.
Unmarshal
(
responseBody
,
&
siliconflowResp
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
usage
:=
&
dto
.
Usage
{
PromptTokens
:
siliconflowResp
.
Meta
.
Tokens
.
InputTokens
,
...
...
relay/channel/tencent/relay-tencent.go
View file @
2db71673
...
...
@@ -136,12 +136,12 @@ func tencentHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http.Resp
var
tencentSb
TencentChatResponseSB
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
,
http
.
StatusInternalServerError
)
}
common
.
CloseResponseBodyGracefully
(
resp
)
err
=
json
.
Unmarshal
(
responseBody
,
&
tencentSb
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
if
tencentSb
.
Response
.
Error
.
Code
!=
0
{
return
nil
,
types
.
WithOpenAIError
(
types
.
OpenAIError
{
...
...
relay/channel/vertex/adaptor.go
View file @
2db71673
...
...
@@ -67,11 +67,10 @@ func (a *Adaptor) ConvertImageRequest(c *gin.Context, info *relaycommon.RelayInf
func
(
a
*
Adaptor
)
Init
(
info
*
relaycommon
.
RelayInfo
)
{
if
strings
.
HasPrefix
(
info
.
UpstreamModelName
,
"claude"
)
{
a
.
RequestMode
=
RequestModeClaude
}
else
if
strings
.
HasPrefix
(
info
.
UpstreamModelName
,
"gemini"
)
{
a
.
RequestMode
=
RequestModeGemini
}
else
if
strings
.
Contains
(
info
.
UpstreamModelName
,
"llama"
)
{
a
.
RequestMode
=
RequestModeLlama
}
a
.
RequestMode
=
RequestModeGemini
}
func
(
a
*
Adaptor
)
GetRequestURL
(
info
*
relaycommon
.
RelayInfo
)
(
string
,
error
)
{
...
...
@@ -83,6 +82,7 @@ func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) {
a
.
AccountCredentials
=
*
adc
suffix
:=
""
if
a
.
RequestMode
==
RequestModeGemini
{
if
model_setting
.
GetGeminiSettings
()
.
ThinkingAdapterEnabled
{
// 新增逻辑:处理 -thinking-<budget> 格式
if
strings
.
Contains
(
info
.
UpstreamModelName
,
"-thinking-"
)
{
...
...
@@ -100,6 +100,11 @@ func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) {
}
else
{
suffix
=
"generateContent"
}
if
strings
.
HasPrefix
(
info
.
UpstreamModelName
,
"imagen"
)
{
suffix
=
"predict"
}
if
region
==
"global"
{
return
fmt
.
Sprintf
(
"https://aiplatform.googleapis.com/v1/projects/%s/locations/global/publishers/google/models/%s:%s"
,
...
...
@@ -231,6 +236,9 @@ func (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, info *relaycom
if
info
.
RelayMode
==
constant
.
RelayModeGemini
{
usage
,
err
=
gemini
.
GeminiTextGenerationHandler
(
c
,
info
,
resp
)
}
else
{
if
strings
.
HasPrefix
(
info
.
UpstreamModelName
,
"imagen"
)
{
return
gemini
.
GeminiImageHandler
(
c
,
info
,
resp
)
}
usage
,
err
=
gemini
.
GeminiChatHandler
(
c
,
info
,
resp
)
}
case
RequestModeLlama
:
...
...
relay/channel/zhipu/relay-zhipu.go
View file @
2db71673
...
...
@@ -220,12 +220,12 @@ func zhipuHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http.Respon
var
zhipuResponse
ZhipuResponse
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
,
http
.
StatusInternalServerError
)
}
common
.
CloseResponseBodyGracefully
(
resp
)
err
=
json
.
Unmarshal
(
responseBody
,
&
zhipuResponse
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
if
!
zhipuResponse
.
Success
{
return
nil
,
types
.
WithOpenAIError
(
types
.
OpenAIError
{
...
...
relay/common_handler/rerank.go
View file @
2db71673
...
...
@@ -16,7 +16,7 @@ import (
func
RerankHandler
(
c
*
gin
.
Context
,
info
*
relaycommon
.
RelayInfo
,
resp
*
http
.
Response
)
(
*
dto
.
Usage
,
*
types
.
NewAPIError
)
{
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeReadResponseBodyFailed
,
http
.
StatusInternalServerError
)
}
common
.
CloseResponseBodyGracefully
(
resp
)
if
common
.
DebugEnabled
{
...
...
@@ -27,7 +27,7 @@ func RerankHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http.Respo
var
xinRerankResponse
xinference
.
XinRerankResponse
err
=
common
.
Unmarshal
(
responseBody
,
&
xinRerankResponse
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
jinaRespResults
:=
make
([]
dto
.
RerankResponseResult
,
len
(
xinRerankResponse
.
Results
))
for
i
,
result
:=
range
xinRerankResponse
.
Results
{
...
...
@@ -62,7 +62,7 @@ func RerankHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http.Respo
}
else
{
err
=
common
.
Unmarshal
(
responseBody
,
&
jinaResp
)
if
err
!=
nil
{
return
nil
,
types
.
New
Error
(
err
,
types
.
ErrorCodeBadResponseBody
)
return
nil
,
types
.
New
OpenAIError
(
err
,
types
.
ErrorCodeBadResponseBody
,
http
.
StatusInternalServerError
)
}
jinaResp
.
Usage
.
PromptTokens
=
jinaResp
.
Usage
.
TotalTokens
}
...
...
relay/gemini_handler.go
View file @
2db71673
...
...
@@ -2,7 +2,6 @@ package relay
import
(
"bytes"
"encoding/json"
"errors"
"fmt"
"io"
...
...
@@ -203,7 +202,7 @@ func GeminiHelper(c *gin.Context) (newAPIError *types.NewAPIError) {
}
requestBody
=
bytes
.
NewReader
(
body
)
}
else
{
jsonData
,
err
:=
js
on
.
Marshal
(
req
)
jsonData
,
err
:=
comm
on
.
Marshal
(
req
)
if
err
!=
nil
{
return
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
)
}
...
...
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