fix:操练场接口报错

This commit is contained in:
chengqian committed 2026-05-14 10:50:19 +08:00
1 parent 0bfa7abfd0
commit aca99eae68
1 file changed
+23 -1
+23 -1
View File
@@ -4,6 +4,7 @@ import (
"context"
"encoding/base64"
"encoding/json"
"errors"
"fmt"
"net/http"
"net/http/httptest"
@@ -17,6 +18,7 @@ import (
"github.com/qianfree/team-api/internal/logic/common"
"github.com/qianfree/team-api/internal/logic/relay"
relaycommon "github.com/qianfree/team-api/relay/common"
"github.com/qianfree/team-api/relay/constant"
"github.com/qianfree/team-api/relay/handler"
)
@@ -68,7 +70,7 @@ func buildPlaygroundRelayContext(ctx context.Context, key *playgroundApiKey, rec
func callRelayAndParseUsage(relayFunc func() (*relaycommon.Usage, *handler.BillingResult, error)) (promptTokens, completionTokens, totalTokens int, err error) {
usage, _, relayErr := relayFunc()
if relayErr != nil {
return 0, 0, 0, relayErr
return 0, 0, 0, convertRelayError(relayErr)
}
if usage != nil {
promptTokens = usage.PromptTokens
@@ -78,6 +80,26 @@ func callRelayAndParseUsage(relayFunc func() (*relaycommon.Usage, *handler.Billi
return
}
// convertRelayError 将 relay 层的 RelayError 转换为 GoFrame gerror,使响应中间件能正确处理
func convertRelayError(err error) error {
var relayErr *constant.RelayError
if !errors.As(err, &relayErr) {
return err
}
switch relayErr.StatusCode {
case 402:
return common.NewBusinessError(10001, "余额不足,请充值后重试")
case 429:
return common.NewBusinessError(10014, "请求过于频繁,请稍后重试")
case 401:
return common.NewBadRequestError("API Key 认证失败")
case 503:
return common.NewBusinessError(10003, "当前无可用渠道,请稍后重试")
default:
return common.NewBadRequestError(relayErr.Message)
}
}
func getRequestID(ctx context.Context) string {
if v := ctx.Value("requestId"); v != nil {
return v.(string)