MCPcopy Create free account
hub / github.com/BlueSkyXN/AI2API / handleChatCompletionRequest

Function handleChatCompletionRequest

wo2api.go:881–943  ·  view source on GitHub ↗

处理聊天补全请求

(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

879
880// 处理聊天补全请求
881func handleChatCompletionRequest(w http.ResponseWriter, r *http.Request) {
882 reqID := generateRequestID()
883 startTime := time.Now()
884 logInfo("[reqID:%s] 处理聊天补全请求", reqID)
885
886 // 从请求头中提取令牌
887 token, err := extractToken(r)
888 if err != nil {
889 logError("[reqID:%s] 提取令牌失败: %v", reqID, err)
890 http.Error(w, fmt.Sprintf("Authorization error: %v", err), http.StatusUnauthorized)
891 return
892 }
893
894 // 解析请求体
895 var apiReq APIRequest
896 if err := json.NewDecoder(r.Body).Decode(&apiReq); err != nil {
897 logError("[reqID:%s] 解析请求失败: %v", reqID, err)
898 http.Error(w, "Invalid request body", http.StatusBadRequest)
899 return
900 }
901
902 // 验证消息格式
903 valid, errMsg := validateMessages(apiReq.Messages)
904 if !valid {
905 logError("[reqID:%s] 消息格式验证失败: %s", reqID, errMsg)
906 http.Error(w, errMsg, http.StatusBadRequest)
907 return
908 }
909
910 // 获取最后一条用户消息和历史记录
911 userMessage, history := extractMessages(apiReq.Messages)
912 if userMessage == "" {
913 logError("[reqID:%s] 未找到有效的用户消息", reqID)
914 http.Error(w, "No valid user message found", http.StatusBadRequest)
915 return
916 }
917
918 // 转发请求到 WoCloud API
919 var responseErr error
920 if apiReq.Stream {
921 responseErr = handleStreamingRequest(w, r, userMessage, history, token, reqID)
922 } else {
923 responseErr = handleNonStreamingRequest(w, r, userMessage, history, token, reqID)
924 }
925
926 // 请求处理完成,更新指标
927 elapsed := time.Since(startTime).Milliseconds()
928
929 // 更新延迟直方图
930 bucketIndex := min(int(elapsed/100), 9)
931 atomic.AddInt64(&latencyHistogram[bucketIndex], 1)
932
933 // 更新平均响应时间
934 atomic.AddInt64(&avgResponseTime, elapsed)
935
936 if responseErr == nil {
937 // 成功计数增加
938 atomic.AddInt64(&successCounter, 1)

Callers 1

mainFunction · 0.70

Calls 9

extractMessagesFunction · 0.85
generateRequestIDFunction · 0.70
logInfoFunction · 0.70
extractTokenFunction · 0.70
logErrorFunction · 0.70
validateMessagesFunction · 0.70
handleStreamingRequestFunction · 0.70
minFunction · 0.70

Tested by

no test coverage detected