diff --git a/CHANGELOG.md b/CHANGELOG.md index faabe18d..8cb19854 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * Bug修复:修复PC端画廊页面的瀑布流组件样式错乱问题 * 功能新增:给思维导图增加 ToolBar,实现思维导图的放大缩小和定位 * Bug修复:修复思维导图不扣费的Bug +* Bug修复:修复管理后台角色删除失败的Bug ## v4.0.5 diff --git a/api/handler/chatimpl/azure_handler.go b/api/handler/chatimpl/azure_handler.go index 30e19a59..09347698 100644 --- a/api/handler/chatimpl/azure_handler.go +++ b/api/handler/chatimpl/azure_handler.go @@ -9,13 +9,14 @@ package chatimpl import ( "bufio" + "context" + "encoding/json" + "errors" + "fmt" "geekai/core/types" "geekai/store/model" "geekai/store/vo" "geekai/utils" - "context" - "encoding/json" - "fmt" "html/template" "io" "strings" @@ -44,14 +45,9 @@ func (h *ChatHandler) sendAzureMessage( logger.Info("用户取消了请求:", prompt) return nil } else if strings.Contains(err.Error(), "no available key") { - utils.ReplyMessage(ws, "抱歉😔😔😔,系统已经没有可用的 API KEY,请联系管理员!") - return nil - } else { - logger.Error(err) + return errors.New("抱歉😔😔😔,系统已经没有可用的 API KEY,请联系管理员!") } - utils.ReplyMessage(ws, ErrorMsg) - utils.ReplyMessage(ws, ErrImg) return err } else { defer response.Body.Close() @@ -73,10 +69,7 @@ func (h *ChatHandler) sendAzureMessage( var responseBody = types.ApiResponse{} err = json.Unmarshal([]byte(line[6:]), &responseBody) if err != nil { // 数据解析出错 - logger.Error(err, line) - utils.ReplyMessage(ws, ErrorMsg) - utils.ReplyMessage(ws, ErrImg) - break + return errors.New(line) } if len(responseBody.Choices) == 0 { @@ -203,11 +196,10 @@ func (h *ChatHandler) sendAzureMessage( if strings.Contains(res.Error.Message, "maximum context length") { logger.Error(res.Error.Message) - utils.ReplyMessage(ws, "当前会话上下文长度超出限制,已为您清空会话上下文!") h.App.ChatContexts.Delete(session.ChatId) return h.sendMessage(ctx, session, role, prompt, ws) } else { - utils.ReplyMessage(ws, "请求 Azure API 失败:"+res.Error.Message) + return fmt.Errorf("请求 Azure API 失败:%v", res.Error) } } diff --git a/api/handler/chatimpl/baidu_handler.go b/api/handler/chatimpl/baidu_handler.go index 4917d28b..42d3e90d 100644 --- a/api/handler/chatimpl/baidu_handler.go +++ b/api/handler/chatimpl/baidu_handler.go @@ -9,13 +9,14 @@ package chatimpl import ( "bufio" + "context" + "encoding/json" + "errors" + "fmt" "geekai/core/types" "geekai/store/model" "geekai/store/vo" "geekai/utils" - "context" - "encoding/json" - "fmt" "html/template" "io" "net/http" @@ -61,14 +62,8 @@ func (h *ChatHandler) sendBaiduMessage( logger.Info("用户取消了请求:", prompt) return nil } else if strings.Contains(err.Error(), "no available key") { - utils.ReplyMessage(ws, "抱歉😔😔😔,系统已经没有可用的 API KEY,请联系管理员!") - return nil - } else { - logger.Error(err) + return errors.New("抱歉😔😔😔,系统已经没有可用的 API KEY,请联系管理员!") } - - utils.ReplyMessage(ws, ErrorMsg) - utils.ReplyMessage(ws, ErrImg) return err } else { defer response.Body.Close() diff --git a/api/handler/chatimpl/chat_handler.go b/api/handler/chatimpl/chat_handler.go index e6ec7b81..48eb65a7 100644 --- a/api/handler/chatimpl/chat_handler.go +++ b/api/handler/chatimpl/chat_handler.go @@ -176,7 +176,7 @@ func (h *ChatHandler) ChatHandle(c *gin.Context) { err = h.sendMessage(ctx, session, chatRole, utils.InterfaceToString(message.Content), client) if err != nil { logger.Error(err) - utils.ReplyChunkMessage(client, types.WsMessage{Type: types.WsEnd}) + utils.ReplyMessage(client, err.Error()) } else { utils.ReplyChunkMessage(client, types.WsMessage{Type: types.WsEnd}) logger.Infof("回答完毕: %v", message.Content) @@ -198,8 +198,7 @@ func (h *ChatHandler) sendMessage(ctx context.Context, session *types.ChatSessio var user model.User res := h.DB.Model(&model.User{}).First(&user, session.UserId) if res.Error != nil { - utils.ReplyMessage(ws, "未授权用户,您正在进行非法操作!") - return res.Error + return errors.New("未授权用户,您正在进行非法操作!") } var userVo vo.User err := utils.CopyObject(user, &userVo) @@ -209,28 +208,22 @@ func (h *ChatHandler) sendMessage(ctx context.Context, session *types.ChatSessio } if userVo.Status == false { - utils.ReplyMessage(ws, "您的账号已经被禁用,如果疑问,请联系管理员!") - utils.ReplyMessage(ws, ErrImg) - return nil + return errors.New("您的账号已经被禁用,如果疑问,请联系管理员!") } if userVo.Power < session.Model.Power { - utils.ReplyMessage(ws, fmt.Sprintf("您当前剩余算力(%d)已不足以支付当前模型的单次对话需要消耗的算力(%d)!", userVo.Power, session.Model.Power)) - utils.ReplyMessage(ws, ErrImg) - return nil + return fmt.Errorf("您当前剩余算力(%d)已不足以支付当前模型的单次对话需要消耗的算力(%d)!", userVo.Power, session.Model.Power) } if userVo.ExpiredTime > 0 && userVo.ExpiredTime <= time.Now().Unix() { - utils.ReplyMessage(ws, "您的账号已经过期,请联系管理员!") - utils.ReplyMessage(ws, ErrImg) - return nil + return errors.New("您的账号已经过期,请联系管理员!") } // 检查 prompt 长度是否超过了当前模型允许的最大上下文长度 promptTokens, err := utils.CalcTokens(prompt, session.Model.Value) if promptTokens > session.Model.MaxContext { - utils.ReplyMessage(ws, "对话内容超出了当前模型允许的最大上下文长度!") - return nil + + return errors.New("对话内容超出了当前模型允许的最大上下文长度!") } var req = types.ApiRequest{ @@ -289,9 +282,7 @@ func (h *ChatHandler) sendMessage(ctx context.Context, session *types.ChatSessio break default: - utils.ReplyMessage(ws, "不支持的平台:"+session.Model.Platform+",请联系管理员!") - utils.ReplyMessage(ws, ErrImg) - return nil + return fmt.Errorf("不支持的平台:%s", session.Model.Platform) } // 加载聊天上下文 @@ -405,10 +396,7 @@ func (h *ChatHandler) sendMessage(ctx context.Context, session *types.ChatSessio case types.QWen: return h.sendQWenMessage(chatCtx, req, userVo, ctx, session, role, prompt, ws) } - utils.ReplyChunkMessage(ws, types.WsMessage{ - Type: types.WsMiddle, - Content: fmt.Sprintf("Not supported platform: %s", session.Model.Platform), - }) + return nil } diff --git a/api/handler/chatimpl/chatglm_handler.go b/api/handler/chatimpl/chatglm_handler.go index 1094d9ce..647d5780 100644 --- a/api/handler/chatimpl/chatglm_handler.go +++ b/api/handler/chatimpl/chatglm_handler.go @@ -9,13 +9,14 @@ package chatimpl import ( "bufio" + "context" + "encoding/json" + "errors" + "fmt" "geekai/core/types" "geekai/store/model" "geekai/store/vo" "geekai/utils" - "context" - "encoding/json" - "fmt" "github.com/golang-jwt/jwt/v5" "html/template" "io" @@ -45,14 +46,8 @@ func (h *ChatHandler) sendChatGLMMessage( logger.Info("用户取消了请求:", prompt) return nil } else if strings.Contains(err.Error(), "no available key") { - utils.ReplyMessage(ws, "抱歉😔😔😔,系统已经没有可用的 API KEY,请联系管理员!") - return nil - } else { - logger.Error(err) + return errors.New("抱歉😔😔😔,系统已经没有可用的 API KEY,请联系管理员!") } - - utils.ReplyMessage(ws, ErrorMsg) - utils.ReplyMessage(ws, ErrImg) return err } else { defer response.Body.Close() diff --git a/api/handler/chatimpl/openai_handler.go b/api/handler/chatimpl/openai_handler.go index 8a7a2891..5078d102 100644 --- a/api/handler/chatimpl/openai_handler.go +++ b/api/handler/chatimpl/openai_handler.go @@ -11,6 +11,7 @@ import ( "bufio" "context" "encoding/json" + "errors" "fmt" "geekai/core/types" "geekai/store/model" @@ -76,10 +77,7 @@ func (h *ChatHandler) sendOpenAiMessage( var responseBody = types.ApiResponse{} err = json.Unmarshal([]byte(line[6:]), &responseBody) if err != nil { // 数据解析出错 - logger.Error(err, line) - utils.ReplyMessage(ws, ErrorMsg) - utils.ReplyMessage(ws, ErrImg) - break + return errors.New(line) } if len(responseBody.Choices) == 0 { // Fixed: 兼容 Azure API 第一个输出空行 continue diff --git a/api/handler/chatimpl/qwen_handler.go b/api/handler/chatimpl/qwen_handler.go index 49e0a5d3..0d8bfa64 100644 --- a/api/handler/chatimpl/qwen_handler.go +++ b/api/handler/chatimpl/qwen_handler.go @@ -9,13 +9,14 @@ package chatimpl import ( "bufio" + "context" + "encoding/json" + "fmt" "geekai/core/types" "geekai/store/model" "geekai/store/vo" "geekai/utils" - "context" - "encoding/json" - "fmt" + "github.com/syndtr/goleveldb/leveldb/errors" "html/template" "io" "strings" @@ -59,14 +60,8 @@ func (h *ChatHandler) sendQWenMessage( logger.Info("用户取消了请求:", prompt) return nil } else if strings.Contains(err.Error(), "no available key") { - utils.ReplyMessage(ws, "抱歉😔😔😔,系统已经没有可用的 API KEY,请联系管理员!") - return nil - } else { - logger.Error(err) + return errors.New("抱歉😔😔😔,系统已经没有可用的 API KEY,请联系管理员!") } - - utils.ReplyMessage(ws, ErrorMsg) - utils.ReplyMessage(ws, ErrImg) return err } else { defer response.Body.Close()