relay_responses_compact.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package openai
  2. import (
  3. "io"
  4. "net/http"
  5. "github.com/QuantumNous/new-api/common"
  6. "github.com/QuantumNous/new-api/dto"
  7. "github.com/QuantumNous/new-api/service"
  8. "github.com/QuantumNous/new-api/types"
  9. "github.com/gin-gonic/gin"
  10. )
  11. func OaiResponsesCompactionHandler(c *gin.Context, resp *http.Response) (*dto.Usage, *types.NewAPIError) {
  12. defer service.CloseResponseBodyGracefully(resp)
  13. responseBody, err := io.ReadAll(resp.Body)
  14. if err != nil {
  15. return nil, types.NewOpenAIError(err, types.ErrorCodeReadResponseBodyFailed, http.StatusInternalServerError)
  16. }
  17. var compactResp dto.OpenAIResponsesCompactionResponse
  18. if err := common.Unmarshal(responseBody, &compactResp); err != nil {
  19. return nil, types.NewOpenAIError(err, types.ErrorCodeBadResponseBody, http.StatusInternalServerError)
  20. }
  21. if oaiError := compactResp.GetOpenAIError(); oaiError != nil && oaiError.Type != "" {
  22. return nil, types.WithOpenAIError(*oaiError, resp.StatusCode)
  23. }
  24. service.IOCopyBytesGracefully(c, resp, responseBody)
  25. usage := dto.Usage{}
  26. if compactResp.Usage != nil {
  27. usage.PromptTokens = compactResp.Usage.InputTokens
  28. usage.CompletionTokens = compactResp.Usage.OutputTokens
  29. usage.TotalTokens = compactResp.Usage.TotalTokens
  30. if compactResp.Usage.InputTokensDetails != nil {
  31. usage.PromptTokensDetails.CachedTokens = compactResp.Usage.InputTokensDetails.CachedTokens
  32. }
  33. }
  34. return &usage, nil
  35. }