MCPcopy
hub / github.com/QuantumNous/new-api / RelayTask

Function RelayTask

controller/relay.go:486–605  ·  view source on GitHub ↗
(c *gin.Context)

Source from the content-addressed store, hash-verified

484}
485
486func RelayTask(c *gin.Context) {
487 relayInfo, err := relaycommon.GenRelayInfo(c, types.RelayFormatTask, nil, nil)
488 if err != nil {
489 c.JSON(http.StatusInternalServerError, &dto.TaskError{
490 Code: "gen_relay_info_failed",
491 Message: err.Error(),
492 StatusCode: http.StatusInternalServerError,
493 })
494 return
495 }
496
497 if taskErr := relay.ResolveOriginTask(c, relayInfo); taskErr != nil {
498 respondTaskError(c, taskErr)
499 return
500 }
501
502 var result *relay.TaskSubmitResult
503 var taskErr *dto.TaskError
504 defer func() {
505 if taskErr != nil && relayInfo.Billing != nil {
506 relayInfo.Billing.Refund(c)
507 }
508 }()
509
510 retryParam := &service.RetryParam{
511 Ctx: c,
512 TokenGroup: relayInfo.TokenGroup,
513 ModelName: relayInfo.OriginModelName,
514 RequestPath: c.Request.URL.Path,
515 Retry: common.GetPointer(0),
516 }
517
518 for ; retryParam.GetRetry() <= common.RetryTimes; retryParam.IncreaseRetry() {
519 var channel *model.Channel
520
521 if lockedCh, ok := relayInfo.LockedChannel.(*model.Channel); ok && lockedCh != nil {
522 channel = lockedCh
523 if retryParam.GetRetry() > 0 {
524 if setupErr := middleware.SetupContextForSelectedChannel(c, channel, relayInfo.OriginModelName); setupErr != nil {
525 taskErr = service.TaskErrorWrapperLocal(setupErr.Err, "setup_locked_channel_failed", http.StatusInternalServerError)
526 break
527 }
528 }
529 } else {
530 var channelErr *types.NewAPIError
531 channel, channelErr = getChannel(c, relayInfo, retryParam)
532 if channelErr != nil {
533 logger.LogError(c, channelErr.Error())
534 taskErr = service.TaskErrorWrapperLocal(channelErr.Err, "get_channel_failed", http.StatusInternalServerError)
535 break
536 }
537 }
538
539 addUsedChannel(c, channel.Id)
540 bodyStorage, bodyErr := common.GetBodyStorage(c)
541 if bodyErr != nil {
542 if common.IsRequestBodyTooLargeError(bodyErr) || errors.Is(bodyErr, common.ErrRequestBodyTooLarge) {
543 taskErr = service.TaskErrorWrapperLocal(bodyErr, "read_request_body_failed", http.StatusRequestEntityTooLarge)

Callers

nothing calls this directly

Calls 15

GetRetryMethod · 0.95
IncreaseRetryMethod · 0.95
ErrorMethod · 0.95
GetAutoBanMethod · 0.95
ResolveOriginTaskFunction · 0.92
TaskErrorWrapperLocalFunction · 0.92
LogErrorFunction · 0.92
RelayTaskSubmitFunction · 0.92
NewChannelErrorFunction · 0.92
NewOpenAIErrorFunction · 0.92
LogInfoFunction · 0.92

Tested by

no test coverage detected