|
|
package util |
|
|
|
|
|
import ( |
|
|
"github.com/tidwall/gjson" |
|
|
"github.com/tidwall/sjson" |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func GetThinkingText(part gjson.Result) string { |
|
|
|
|
|
if text := part.Get("text"); text.Exists() && text.Type == gjson.String { |
|
|
return text.String() |
|
|
} |
|
|
|
|
|
|
|
|
thinkingField := part.Get("thinking") |
|
|
if !thinkingField.Exists() { |
|
|
return "" |
|
|
} |
|
|
|
|
|
|
|
|
if thinkingField.Type == gjson.String { |
|
|
return thinkingField.String() |
|
|
} |
|
|
|
|
|
|
|
|
if thinkingField.IsObject() { |
|
|
if inner := thinkingField.Get("text"); inner.Exists() && inner.Type == gjson.String { |
|
|
return inner.String() |
|
|
} |
|
|
if inner := thinkingField.Get("thinking"); inner.Exists() && inner.Type == gjson.String { |
|
|
return inner.String() |
|
|
} |
|
|
} |
|
|
|
|
|
return "" |
|
|
} |
|
|
|
|
|
|
|
|
func GetThinkingTextFromJSON(jsonStr string) string { |
|
|
return GetThinkingText(gjson.Parse(jsonStr)) |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func SanitizeThinkingPart(part gjson.Result) string { |
|
|
|
|
|
if part.Get("thought").Bool() { |
|
|
result := `{"thought":true}` |
|
|
if text := GetThinkingText(part); text != "" { |
|
|
result, _ = sjson.Set(result, "text", text) |
|
|
} |
|
|
if sig := part.Get("thoughtSignature"); sig.Exists() && sig.Type == gjson.String { |
|
|
result, _ = sjson.Set(result, "thoughtSignature", sig.String()) |
|
|
} |
|
|
return result |
|
|
} |
|
|
|
|
|
|
|
|
if part.Get("type").String() == "thinking" || part.Get("thinking").Exists() { |
|
|
result := `{"type":"thinking"}` |
|
|
if text := GetThinkingText(part); text != "" { |
|
|
result, _ = sjson.Set(result, "thinking", text) |
|
|
} |
|
|
if sig := part.Get("signature"); sig.Exists() && sig.Type == gjson.String { |
|
|
result, _ = sjson.Set(result, "signature", sig.String()) |
|
|
} |
|
|
return result |
|
|
} |
|
|
|
|
|
|
|
|
return StripCacheControl(part.Raw) |
|
|
} |
|
|
|
|
|
|
|
|
func StripCacheControl(jsonStr string) string { |
|
|
result := jsonStr |
|
|
result, _ = sjson.Delete(result, "cache_control") |
|
|
result, _ = sjson.Delete(result, "providerOptions") |
|
|
return result |
|
|
} |
|
|
|