|
@@ -52,13 +52,11 @@ func (r *ChatResult) GetContentJsonStr() (string, error) {
|
|
|
err = errors.New("choices empty")
|
|
|
}
|
|
|
if !IsOpenaiModel(r.Model) { //不支持Response Schema的要特殊处理一下
|
|
|
- var isJsonContent bool
|
|
|
- content, isJsonContent = ExtractJSONContent(content)
|
|
|
- if !isJsonContent {
|
|
|
- return "", errors.New("invalid json content")
|
|
|
+ content, _, err = ExtractJSONContent(content)
|
|
|
+ if err != nil {
|
|
|
+ return "", fmt.Errorf("GCJS ExtractJSONContent err:'%s'", err)
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
return content, err
|
|
|
}
|
|
|
|
|
@@ -71,12 +69,10 @@ func (r *ChatResult) ParseContentAs(target any) error {
|
|
|
} else if content == "" {
|
|
|
return errors.New("parseContent err: content is empty or unavailable")
|
|
|
}
|
|
|
-
|
|
|
if !IsOpenaiModel(r.Model) { //不支持Response Schema的要特殊处理一下
|
|
|
- var isJsonContent bool
|
|
|
- content, isJsonContent = ExtractJSONContent(content)
|
|
|
- if !isJsonContent {
|
|
|
- return errors.New("invalid json content")
|
|
|
+ content, _, err = ExtractJSONContent(content)
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("PCA ExtractJSONContent err:'%s'", err)
|
|
|
}
|
|
|
}
|
|
|
return ParseContentAs(content, target, false)
|
|
@@ -192,20 +188,20 @@ func ParseContentAs(content string, target any, removeJsonBlock bool) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-func ExtractJSONContent(s string) (string, bool) {
|
|
|
+func ExtractJSONContent(s string) (string, bool, error) {
|
|
|
startMarker := "```json"
|
|
|
endMarker := "```"
|
|
|
|
|
|
// 寻找起始标记
|
|
|
startIdx := strings.Index(s, startMarker)
|
|
|
if startIdx == -1 {
|
|
|
- return "", false // 没有起始标记
|
|
|
+ return s, false, nil // 没有起始标记就不进行之后步骤
|
|
|
}
|
|
|
|
|
|
// 寻找结束标记(需在起始标记之后查找)
|
|
|
endIdx := strings.LastIndex(s, endMarker)
|
|
|
if endIdx == -1 || endIdx <= startIdx {
|
|
|
- return "", false // 没有结束标记或标记顺序错误
|
|
|
+ return s, false, errors.New("lost endMarker") // 没有结束标记或标记顺序错误
|
|
|
}
|
|
|
|
|
|
// 计算内容范围
|
|
@@ -217,8 +213,8 @@ func ExtractJSONContent(s string) (string, bool) {
|
|
|
|
|
|
// 若内容为空视为无效
|
|
|
if content == "" {
|
|
|
- return "", false
|
|
|
+ return s, false, errors.New("empty content")
|
|
|
}
|
|
|
|
|
|
- return content, true
|
|
|
+ return content, true, nil
|
|
|
}
|