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

Function parseStreamResponseAsNonStream

wo2api.go:1595–1833  ·  view source on GitHub ↗

将流式响应解析为非流式响应 - 完全重写版

(body []byte, reqID string)

Source from the content-addressed store, hash-verified

1593
1594// 将流式响应解析为非流式响应 - 完全重写版
1595func parseStreamResponseAsNonStream(body []byte, reqID string) (*WoCloudResponse, error) {
1596 logInfo("[reqID:%s] 解析流式响应为非流式", reqID)
1597 parseStartTime := time.Now()
1598
1599 // 如果配置了诊断,保存响应内容
1600 if appConfig.DiagnosticLevel != "none" || appConfig.SaveResponses {
1601 enhancedDiagnoseChatResponse(body, reqID)
1602 }
1603
1604 bodyStr := string(body)
1605 lines := strings.Split(bodyStr, "\n")
1606
1607 // 统计变量
1608 totalLines := 0
1609 validJsonLines := 0
1610
1611 // 初始化完整响应对象
1612 fullResponse := &WoCloudResponse{
1613 Code: 0,
1614 Response: "",
1615 ReasoningContent: "",
1616 Finish: 1, // 默认设置为完成状态
1617 }
1618
1619 // 创建一个有序map存储响应行,确保按顺序处理
1620 responseMap := make(map[int]string)
1621 var maxIndex int = 0
1622
1623 // 第一步:收集所有的data:行并解析
1624 for i, line := range lines {
1625 line = strings.TrimSpace(line)
1626
1627 if !strings.HasPrefix(line, "data:") {
1628 continue
1629 }
1630
1631 totalLines++
1632 jsonStr := strings.TrimPrefix(line, "data:")
1633 jsonStr = strings.TrimSpace(jsonStr)
1634
1635 if jsonStr == "[DONE]" {
1636 continue
1637 }
1638
1639 // 解析JSON
1640 var respObj map[string]interface{}
1641 if err := json.Unmarshal([]byte(jsonStr), &respObj); err != nil {
1642 // 尝试修复JSON格式
1643 fixedJson := sanitizeJsonString(jsonStr, reqID)
1644 if err := json.Unmarshal([]byte(fixedJson), &respObj); err != nil {
1645 // 跳过无效的JSON
1646 continue
1647 }
1648 }
1649
1650 validJsonLines++
1651
1652 // 提取响应内容

Callers 1

Calls 5

sanitizeJsonStringFunction · 0.85
logInfoFunction · 0.70
logWarnFunction · 0.70

Tested by

no test coverage detected