(c *gin.Context)
| 484 | } |
| 485 | |
| 486 | func 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) |
nothing calls this directly
no test coverage detected