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, OpenAIError: 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.OpenAIError = 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 }