fix(网关): 修复流式 tool 输入参数转换
This commit is contained in:
@@ -3536,7 +3536,7 @@ func (s *GatewayService) handleStreamingResponse(ctx context.Context, resp *http
|
|||||||
eventName = eventType
|
eventName = eventType
|
||||||
}
|
}
|
||||||
|
|
||||||
if needModelReplace && eventType == "message_start" {
|
if needModelReplace {
|
||||||
if msg, ok := event["message"].(map[string]any); ok {
|
if msg, ok := event["message"].(map[string]any); ok {
|
||||||
if model, ok := msg["model"].(string); ok && model == mappedModel {
|
if model, ok := msg["model"].(string); ok && model == mappedModel {
|
||||||
msg["model"] = originalModel
|
msg["model"] = originalModel
|
||||||
@@ -3701,45 +3701,6 @@ func (s *GatewayService) handleStreamingResponse(ctx context.Context, resp *http
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// replaceModelInSSELine 替换SSE数据行中的model字段
|
|
||||||
func (s *GatewayService) replaceModelInSSELine(line, fromModel, toModel string) string {
|
|
||||||
if !sseDataRe.MatchString(line) {
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
data := sseDataRe.ReplaceAllString(line, "")
|
|
||||||
if data == "" || data == "[DONE]" {
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
|
|
||||||
var event map[string]any
|
|
||||||
if err := json.Unmarshal([]byte(data), &event); err != nil {
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
|
|
||||||
// 只替换 message_start 事件中的 message.model
|
|
||||||
if event["type"] != "message_start" {
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
|
|
||||||
msg, ok := event["message"].(map[string]any)
|
|
||||||
if !ok {
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
|
|
||||||
model, ok := msg["model"].(string)
|
|
||||||
if !ok || model != fromModel {
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
|
|
||||||
msg["model"] = toModel
|
|
||||||
newData, err := json.Marshal(event)
|
|
||||||
if err != nil {
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
|
|
||||||
return "data: " + string(newData)
|
|
||||||
}
|
|
||||||
|
|
||||||
func rewriteParamKeysInValue(value any, cache map[string]string) (any, bool) {
|
func rewriteParamKeysInValue(value any, cache map[string]string) (any, bool) {
|
||||||
switch v := value.(type) {
|
switch v := value.(type) {
|
||||||
case map[string]any:
|
case map[string]any:
|
||||||
@@ -3860,22 +3821,6 @@ func replaceToolNamesInText(text string, toolNameMap map[string]string) string {
|
|||||||
return output
|
return output
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *GatewayService) replaceToolNamesInSSELine(line string, toolNameMap map[string]string) string {
|
|
||||||
if !sseDataRe.MatchString(line) {
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
data := sseDataRe.ReplaceAllString(line, "")
|
|
||||||
if data == "" || data == "[DONE]" {
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
|
|
||||||
replaced := replaceToolNamesInText(data, toolNameMap)
|
|
||||||
if replaced == data {
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
return "data: " + replaced
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *GatewayService) parseSSEUsage(data string, usage *ClaudeUsage) {
|
func (s *GatewayService) parseSSEUsage(data string, usage *ClaudeUsage) {
|
||||||
// 解析message_start获取input tokens(标准Claude API格式)
|
// 解析message_start获取input tokens(标准Claude API格式)
|
||||||
var msgStart struct {
|
var msgStart struct {
|
||||||
|
|||||||
Reference in New Issue
Block a user