feat: gpt-4-gizmo-g-* model is supported

This commit is contained in:
RockYang 2024-01-15 15:03:05 +08:00
parent 59fa21779b
commit dc24a8c781
14 changed files with 86 additions and 31 deletions

View File

@ -435,7 +435,7 @@ func (h *ChatHandler) doRequest(ctx context.Context, req types.ApiRequest, platf
apiURL = strings.Replace(apiKey.ApiURL, "{model}", req.Model, 1)
break
default:
if req.Model == "gpt-4-all" {
if req.Model == "gpt-4-all" || strings.HasPrefix(req.Model, "gpt-4-gizmo-g-") {
apiURL = "https://gpt.bemore.lol/v1/chat/completions"
} else {
apiURL = apiKey.ApiURL

View File

@ -21,11 +21,11 @@ func NewUploadHandler(app *core.AppServer, db *gorm.DB, manager *oss.UploaderMan
}
func (h *UploadHandler) Upload(c *gin.Context) {
fileURL, err := h.uploaderManager.GetUploadHandler().PutFile(c, "file")
file, err := h.uploaderManager.GetUploadHandler().PutFile(c, "file")
if err != nil {
resp.ERROR(c, err.Error())
return
}
resp.SUCCESS(c, fileURL)
resp.SUCCESS(c, file)
}

View File

@ -44,16 +44,16 @@ func NewAliYunOss(appConfig *types.AppConfig) (*AliYunOss, error) {
}
func (s AliYunOss) PutFile(ctx *gin.Context, name string) (string, error) {
func (s AliYunOss) PutFile(ctx *gin.Context, name string) (File, error) {
// 解析表单
file, err := ctx.FormFile(name)
if err != nil {
return "", err
return File{}, err
}
// 打开上传文件
src, err := file.Open()
if err != nil {
return "", err
return File{}, err
}
defer src.Close()
@ -62,10 +62,14 @@ func (s AliYunOss) PutFile(ctx *gin.Context, name string) (string, error) {
// 上传文件
err = s.bucket.PutObject(objectKey, src)
if err != nil {
return "", err
return File{}, err
}
return fmt.Sprintf("%s/%s", s.config.Domain, objectKey), nil
return File{
URL: fmt.Sprintf("%s/%s", s.config.Domain, objectKey),
Ext: fileExt,
Size: file.Size,
}, nil
}
func (s AliYunOss) PutImg(imageURL string, useProxy bool) (string, error) {

View File

@ -23,23 +23,28 @@ func NewLocalStorage(config *types.AppConfig) LocalStorage {
}
}
func (s LocalStorage) PutFile(ctx *gin.Context, name string) (string, error) {
func (s LocalStorage) PutFile(ctx *gin.Context, name string) (File, error) {
file, err := ctx.FormFile(name)
if err != nil {
return "", fmt.Errorf("error with get form: %v", err)
return File{}, fmt.Errorf("error with get form: %v", err)
}
filePath, err := utils.GenUploadPath(s.config.BasePath, file.Filename)
path, err := utils.GenUploadPath(s.config.BasePath, file.Filename)
if err != nil {
return "", fmt.Errorf("error with generate filename: %s", err.Error())
return File{}, fmt.Errorf("error with generate filename: %s", err.Error())
}
// 将文件保存到指定路径
err = ctx.SaveUploadedFile(file, filePath)
err = ctx.SaveUploadedFile(file, path)
if err != nil {
return "", fmt.Errorf("error with save upload file: %s", err.Error())
return File{}, fmt.Errorf("error with save upload file: %s", err.Error())
}
return utils.GenUploadUrl(s.config.BasePath, s.config.BaseURL, filePath), nil
ext := filepath.Ext(file.Filename)
return File{
URL: utils.GenUploadUrl(s.config.BasePath, s.config.BaseURL, path),
Ext: ext,
Size: file.Size,
}, nil
}
func (s LocalStorage) PutImg(imageURL string, useProxy bool) (string, error) {

View File

@ -65,15 +65,15 @@ func (s MiniOss) PutImg(imageURL string, useProxy bool) (string, error) {
return fmt.Sprintf("%s/%s/%s", s.config.Domain, s.config.Bucket, info.Key), nil
}
func (s MiniOss) PutFile(ctx *gin.Context, name string) (string, error) {
func (s MiniOss) PutFile(ctx *gin.Context, name string) (File, error) {
file, err := ctx.FormFile(name)
if err != nil {
return "", fmt.Errorf("error with get form: %v", err)
return File{}, fmt.Errorf("error with get form: %v", err)
}
// Open the uploaded file
fileReader, err := file.Open()
if err != nil {
return "", fmt.Errorf("error opening file: %v", err)
return File{}, fmt.Errorf("error opening file: %v", err)
}
defer fileReader.Close()
@ -83,10 +83,14 @@ func (s MiniOss) PutFile(ctx *gin.Context, name string) (string, error) {
ContentType: file.Header.Get("Content-Type"),
})
if err != nil {
return "", fmt.Errorf("error uploading to MinIO: %v", err)
return File{}, fmt.Errorf("error uploading to MinIO: %v", err)
}
return fmt.Sprintf("%s/%s/%s", s.config.Domain, s.config.Bucket, info.Key), nil
return File{
URL: fmt.Sprintf("%s/%s/%s", s.config.Domain, s.config.Bucket, info.Key),
Ext: fileExt,
Size: file.Size,
}, nil
}
func (s MiniOss) Delete(fileURL string) error {

View File

@ -50,16 +50,16 @@ func NewQiNiuOss(appConfig *types.AppConfig) QinNiuOss {
}
}
func (s QinNiuOss) PutFile(ctx *gin.Context, name string) (string, error) {
func (s QinNiuOss) PutFile(ctx *gin.Context, name string) (File, error) {
// 解析表单
file, err := ctx.FormFile(name)
if err != nil {
return "", err
return File{}, err
}
// 打开上传文件
src, err := file.Open()
if err != nil {
return "", err
return File{}, err
}
defer src.Close()
@ -70,10 +70,15 @@ func (s QinNiuOss) PutFile(ctx *gin.Context, name string) (string, error) {
extra := storage.PutExtra{}
err = s.uploader.Put(ctx, &ret, s.putPolicy.UploadToken(s.mac), key, src, file.Size, &extra)
if err != nil {
return "", err
return File{}, err
}
return fmt.Sprintf("%s/%s", s.config.Domain, ret.Key), nil
return File{
URL: fmt.Sprintf("%s/%s", s.config.Domain, ret.Key),
Ext: fileExt,
Size: file.Size,
}, nil
}
func (s QinNiuOss) PutImg(imageURL string, useProxy bool) (string, error) {

View File

@ -2,8 +2,13 @@ package oss
import "github.com/gin-gonic/gin"
type File struct {
Size int64
URL string
Ext string
}
type Uploader interface {
PutFile(ctx *gin.Context, name string) (string, error)
PutFile(ctx *gin.Context, name string) (File, error)
PutImg(imageURL string, useProxy bool) (string, error)
Delete(fileURL string) error
}

12
api/store/model/file.go Normal file
View File

@ -0,0 +1,12 @@
package model
import "time"
type File struct {
Id uint `gorm:"primarykey;column:id"`
UserId uint
URL string
Ext string
Size int64
CreatedAt time.Time
}

10
api/store/vo/File.go Normal file
View File

@ -0,0 +1,10 @@
package vo
type File struct {
Id uint
UserId uint `json:"user_id"`
URL string `json:"url"`
Ext string `json:"ext"`
Size int64 `json:"size"`
CreatedAt int64 `json:"created_at"`
}

View File

@ -1,2 +1,12 @@
ALTER TABLE `chatgpt_orders` CHANGE `mobile` `username` VARCHAR(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户明';
ALTER TABLE `chatgpt_invite_logs` CHANGE `username` `username` VARCHAR(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名';
CREATE TABLE `chatgpt_plus`.`chatgpt_files` (
`id` INT(11) NOT NULL AUTO_INCREMENT ,
`user_id` INT(11) NOT NULL COMMENT '用户 ID' ,
`url` VARCHAR(255) NOT NULL COMMENT '文件地址' ,
`ext` VARCHAR(10) NOT NULL COMMENT '文件后缀' ,
`created_at` DATETIME NOT NULL COMMENT '创建时间' ,
PRIMARY KEY (`id`)) ENGINE = InnoDB COMMENT = '用户文件表';
ALTER TABLE `chatgpt_files` ADD `size` BIGINT(20) NOT NULL DEFAULT '0' COMMENT '文件大小' AFTER `ext`;

View File

@ -93,7 +93,7 @@ const afterRead = (file) => {
formData.append('file', result, result.name);
//
httpPost('/api/upload', formData).then((res) => {
user.value.avatar = res.data
user.value.avatar = res.data.url
ElMessage.success({message: "上传成功", duration: 500})
}).catch((e) => {
ElMessage.error('图片上传失败:' + e.message)

View File

@ -668,7 +668,7 @@ const afterRead = (file) => {
formData.append('file', result, result.name);
//
httpPost('/api/upload', formData).then((res) => {
params.value.img = res.data
params.value.img = res.data.url
ElMessage.success('上传成功')
}).catch((e) => {
ElMessage.error('上传失败:' + e.message)

View File

@ -316,7 +316,7 @@ const uploadRewardImg = (file) => {
formData.append('file', result, result.name);
//
httpPost('/api/upload', formData).then((res) => {
system.value['reward_img'] = res.data
system.value['reward_img'] = res.data.url
ElMessage.success('上传成功')
}).catch((e) => {
ElMessage.error('上传失败:' + e.message)