Files

61 lines
1.4 KiB
Go

package utils
import (
"encoding/json"
"strings"
)
func CleanAIResponse(response string) string {
result := strings.TrimSpace(response)
for i := 0; i < 10; i++ {
changed := false
if strings.HasPrefix(result, "```json") {
result = strings.TrimSpace(strings.TrimPrefix(result, "```json"))
changed = true
} else if strings.HasPrefix(result, "```") {
result = strings.TrimSpace(strings.TrimPrefix(result, "```"))
changed = true
}
if strings.HasSuffix(result, "```") {
result = strings.TrimSpace(strings.TrimSuffix(result, "```"))
changed = true
}
if !changed {
break
}
}
firstBrace := strings.Index(result, "{")
lastBrace := strings.LastIndex(result, "}")
if firstBrace >= 0 && lastBrace >= 0 && lastBrace > firstBrace {
result = result[firstBrace : lastBrace+1]
}
result = strings.ReplaceAll(result, "`", "")
result = strings.ReplaceAll(result, "\\n", "\n")
result = strings.ReplaceAll(result, "\\r", "\r")
result = strings.ReplaceAll(result, "\\t", "\t")
return strings.TrimSpace(result)
}
func IsValidJSON(s string) bool {
var js json.RawMessage
return json.Unmarshal([]byte(s), &js) == nil
}
func ExtractJSONFromText(text string) string {
firstBrace := strings.Index(text, "{")
lastBrace := strings.LastIndex(text, "}")
if firstBrace >= 0 && lastBrace >= 0 && lastBrace > firstBrace {
return text[firstBrace : lastBrace+1]
}
return ""
}