MCPcopy Create free account
hub / github.com/aiprodcoder/MIXAPI / WssHelper

Function WssHelper

relay/websocket.go:15–76  ·  view source on GitHub ↗
(c *gin.Context, ws *websocket.Conn)

Source from the content-addressed store, hash-verified

13)
14
15func WssHelper(c *gin.Context, ws *websocket.Conn) (newAPIError *types.NewAPIError) {
16 relayInfo := relaycommon.GenRelayInfoWs(c, ws)
17
18 // get & validate textRequest 获取并验证文本请求
19 //realtimeEvent, err := getAndValidateWssRequest(c, ws)
20 //if err != nil {
21 // common.LogError(c, fmt.Sprintf("getAndValidateWssRequest failed: %s", err.Error()))
22 // return service.OpenAIErrorWrapperLocal(err, "invalid_text_request", http.StatusBadRequest)
23 //}
24
25 err := helper.ModelMappedHelper(c, relayInfo, nil)
26 if err != nil {
27 return types.NewError(err, types.ErrorCodeChannelModelMappedError)
28 }
29
30 priceData, err := helper.ModelPriceHelper(c, relayInfo, 0, 0)
31 if err != nil {
32 return types.NewError(err, types.ErrorCodeModelPriceError)
33 }
34
35 // pre-consume quota 预消耗配额
36 preConsumedQuota, userQuota, newAPIError := preConsumeQuota(c, priceData.ShouldPreConsumedQuota, relayInfo)
37 if newAPIError != nil {
38 return newAPIError
39 }
40
41 defer func() {
42 if newAPIError != nil {
43 returnPreConsumedQuota(c, relayInfo, userQuota, preConsumedQuota)
44 }
45 }()
46
47 adaptor := GetAdaptor(relayInfo.ApiType)
48 if adaptor == nil {
49 return types.NewError(fmt.Errorf("invalid api type: %d", relayInfo.ApiType), types.ErrorCodeInvalidApiType)
50 }
51 adaptor.Init(relayInfo)
52 //var requestBody io.Reader
53 //firstWssRequest, _ := c.Get("first_wss_request")
54 //requestBody = bytes.NewBuffer(firstWssRequest.([]byte))
55
56 statusCodeMappingStr := c.GetString("status_code_mapping")
57 resp, err := adaptor.DoRequest(c, relayInfo, nil)
58 if err != nil {
59 return types.NewError(err, types.ErrorCodeDoRequestFailed)
60 }
61
62 if resp != nil {
63 relayInfo.TargetWs = resp.(*websocket.Conn)
64 defer relayInfo.TargetWs.Close()
65 }
66
67 usage, newAPIError := adaptor.DoResponse(c, nil, relayInfo)
68 if newAPIError != nil {
69 // reset status code 重置状态码
70 service.ResetStatusCode(newAPIError, statusCodeMappingStr)
71 return newAPIError
72 }

Callers 1

wssRequestFunction · 0.92

Calls 11

ModelMappedHelperFunction · 0.92
NewErrorFunction · 0.92
ModelPriceHelperFunction · 0.92
ResetStatusCodeFunction · 0.92
PostWssConsumeQuotaFunction · 0.92
preConsumeQuotaFunction · 0.85
returnPreConsumedQuotaFunction · 0.85
GetAdaptorFunction · 0.85
InitMethod · 0.65
DoRequestMethod · 0.65
DoResponseMethod · 0.65

Tested by

no test coverage detected