61 lines
1.4 KiB
Go
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 ""
|
|
} |