首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
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 ""
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package utils
|
||||
|
||||
func Min(a, b int) int {
|
||||
if a < b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
func Max(a, b int) int {
|
||||
if a > b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
func Clamp(value, min, max int) int {
|
||||
if value < min {
|
||||
return min
|
||||
}
|
||||
if value > max {
|
||||
return max
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
func Abs(n int) int {
|
||||
if n < 0 {
|
||||
return -n
|
||||
}
|
||||
return n
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
func ConvertToString(v interface{}) string {
|
||||
if v == nil {
|
||||
return ""
|
||||
}
|
||||
switch val := v.(type) {
|
||||
case string:
|
||||
return val
|
||||
case int, int8, int16, int32, int64:
|
||||
return fmt.Sprintf("%d", val)
|
||||
case float32, float64:
|
||||
return fmt.Sprintf("%.0f", val)
|
||||
default:
|
||||
return fmt.Sprintf("%v", val)
|
||||
}
|
||||
}
|
||||
|
||||
func ConvertToStringSlice(v []interface{}) []interface{} {
|
||||
if v == nil {
|
||||
return []interface{}{}
|
||||
}
|
||||
result := make([]interface{}, 0, len(v))
|
||||
for _, item := range v {
|
||||
result = append(result, ConvertToString(item))
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func CleanText(text string) string {
|
||||
var builder strings.Builder
|
||||
for _, r := range text {
|
||||
if unicode.IsPrint(r) || r == '\n' || r == '\r' || r == '\t' {
|
||||
builder.WriteRune(r)
|
||||
} else {
|
||||
builder.WriteRune(' ')
|
||||
}
|
||||
}
|
||||
|
||||
result := builder.String()
|
||||
result = strings.ReplaceAll(result, "\r\n", "\n")
|
||||
result = strings.ReplaceAll(result, "\r", "\n")
|
||||
|
||||
for strings.Contains(result, "\n\n\n") {
|
||||
result = strings.ReplaceAll(result, "\n\n\n", "\n\n")
|
||||
}
|
||||
|
||||
for strings.Contains(result, " ") {
|
||||
result = strings.ReplaceAll(result, " ", " ")
|
||||
}
|
||||
|
||||
return strings.TrimSpace(result)
|
||||
}
|
||||
Reference in New Issue
Block a user