mirror of
https://github.com/linux-do/new-api.git
synced 2025-09-17 07:56:38 +08:00
69 lines
1.6 KiB
Go
69 lines
1.6 KiB
Go
package common
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"github.com/gin-gonic/gin"
|
|
_ "image/gif"
|
|
_ "image/jpeg"
|
|
_ "image/png"
|
|
"io"
|
|
"net/http"
|
|
"one-api/common"
|
|
"one-api/dto"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
var StopFinishReason = "stop"
|
|
|
|
func RelayErrorHandler(resp *http.Response) (OpenAIErrorWithStatusCode *dto.OpenAIErrorWithStatusCode) {
|
|
OpenAIErrorWithStatusCode = &dto.OpenAIErrorWithStatusCode{
|
|
StatusCode: resp.StatusCode,
|
|
Error: dto.OpenAIError{
|
|
Message: fmt.Sprintf("bad response status code %d", resp.StatusCode),
|
|
Type: "upstream_error",
|
|
Code: "bad_response_status_code",
|
|
Param: strconv.Itoa(resp.StatusCode),
|
|
},
|
|
}
|
|
responseBody, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return
|
|
}
|
|
err = resp.Body.Close()
|
|
if err != nil {
|
|
return
|
|
}
|
|
var textResponse dto.TextResponse
|
|
err = json.Unmarshal(responseBody, &textResponse)
|
|
if err != nil {
|
|
return
|
|
}
|
|
OpenAIErrorWithStatusCode.Error = *textResponse.Error
|
|
return
|
|
}
|
|
|
|
func GetFullRequestURL(baseURL string, requestURL string, channelType int) string {
|
|
fullRequestURL := fmt.Sprintf("%s%s", baseURL, requestURL)
|
|
|
|
if strings.HasPrefix(baseURL, "https://gateway.ai.cloudflare.com") {
|
|
switch channelType {
|
|
case common.ChannelTypeOpenAI:
|
|
fullRequestURL = fmt.Sprintf("%s%s", baseURL, strings.TrimPrefix(requestURL, "/v1"))
|
|
case common.ChannelTypeAzure:
|
|
fullRequestURL = fmt.Sprintf("%s%s", baseURL, strings.TrimPrefix(requestURL, "/openai/deployments"))
|
|
}
|
|
}
|
|
return fullRequestURL
|
|
}
|
|
|
|
func GetAPIVersion(c *gin.Context) string {
|
|
query := c.Request.URL.Query()
|
|
apiVersion := query.Get("api-version")
|
|
if apiVersion == "" {
|
|
apiVersion = c.GetString("api_version")
|
|
}
|
|
return apiVersion
|
|
}
|