12 Commits

16 changed files with 252 additions and 110 deletions
Split View
  1. +2
    -2
      models/ai_model_manage.go
  2. +14
    -2
      models/hf_model.go
  3. +49
    -25
      modules/urchin_v2/client.go
  4. +37
    -38
      modules/urchin_v2/client/urchin_client.go
  5. +87
    -0
      modules/urchin_v2/module/urchin.go
  6. +1
    -0
      options/locale/locale_en-US.ini
  7. +1
    -0
      options/locale/locale_zh-CN.ini
  8. BIN
      public/img/domestic/biren.png
  9. +12
    -11
      routers/api/v1/aimodel/aimodel.go
  10. +3
    -3
      routers/api/v1/dataset/dataset.go
  11. +3
    -1
      routers/response/response_list.go
  12. +22
    -14
      services/subject_service/aimodel_service.go
  13. +1
    -1
      services/subject_service/dataset_service.go
  14. +0
    -7
      services/subject_service/upload_service.go
  15. +18
    -4
      web_src/vuepages/pages/computingpower/domestic/index.vue
  16. +2
    -2
      web_src/vuepages/pages/guide/components/FileUpload.vue

+ 2
- 2
models/ai_model_manage.go View File

@@ -1158,7 +1158,7 @@ func GetAimodelByID(id string) (*AiModelManage, error) {
return aimodel, nil
}

func DeleteAimodel(doer *User, uid int64, aimodelId string) error {
func DeleteAimodel(ctx DBContext, doer *User, uid int64, aimodelId string) error {
// In case is a organization.
org, err := GetUserByID(uid)
if err != nil {
@@ -1170,7 +1170,7 @@ func DeleteAimodel(doer *User, uid int64, aimodelId string) error {
}
}

sess := x
sess := ctx.e
aimodel := &AiModelManage{ID: aimodelId, OwnerID: uid}
has, err := sess.Get(aimodel)
if err != nil {


+ 14
- 2
models/hf_model.go View File

@@ -1,11 +1,12 @@
package models

import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/timeutil"
"fmt"
"strings"
"time"

"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/timeutil"
"xorm.io/builder"
)

@@ -349,6 +350,17 @@ func DeleteHfFilesByModelId(id string) error {
return nil
}

func DeleteHfFilesByModelIdWithContext(ctx DBContext, id string) error {
sess := ctx.e
_, err := sess.Delete(&HfModelFile{
ModelId: id,
})
if err != nil {
return err
}
return nil
}

func GetHfModelSizeByModelId(modelId string) (int64, error) {
sess := x.NewSession()
defer sess.Close()


+ 49
- 25
modules/urchin_v2/client.go View File

@@ -24,16 +24,6 @@ type UrchinV2Client struct {
ObsClient *obs.ObsClient
}

const UrchinSuccessCode = 0

func IsUrchinRespSuccess(resp *urchin_module.BaseResp) bool {
return resp.Code == UrchinSuccessCode
}

func UrchinRespToError(resp *urchin_module.BaseResp) error {
return fmt.Errorf("urchin operate error.[%d]%s", resp.Code, resp.Message)
}

func NewUrchinClient(address string,
reqTimeout int64,
maxConnection int) *UrchinV2Client {
@@ -70,8 +60,8 @@ func (client *UrchinV2Client) CreateCollection(name string) (string, error) {
if nil != err {
return "", err
}
if createObjectResp.Code != 0 || createObjectResp.ObjUuid == "" {
return "", fmt.Errorf("urchin create object error.resp = %+v", createObjectResp)
if !createObjectResp.IsSuccess() {
return "", createObjectResp.ToError()
}
return createObjectResp.ObjUuid, nil
}
@@ -89,8 +79,8 @@ func (client *UrchinV2Client) CreatePutObjectSignedUrl(objUuid string, relativeP
if nil != err {
return "", err
}
if resp.Code != 0 {
return "", fmt.Errorf("urchin CreatePutObjectSignedUrl error.[%d](%s)] resp=%v", resp.Code, resp.Message, resp)
if !resp.IsSuccess() {
return "", resp.ToError()
}

return resp.SignedUrl, nil
@@ -224,10 +214,13 @@ func (client *UrchinV2Client) DeleteObjectDeployment(objUuid string) error {
ctx := context.Background()
var force = new(bool)
*force = true
err, _ := client.UrchinClient.DeleteObjectDeployment(ctx, &urchin_module.DeleteObjectDeploymentReq{
err, resp := client.UrchinClient.DeleteObjectDeployment(ctx, &urchin_module.DeleteObjectDeploymentReq{
ObjUuid: objUuid,
Force: force,
})
if !resp.IsSuccess() {
return resp.ToError()
}
return err
}

@@ -244,6 +237,12 @@ func (client *UrchinV2Client) ListPrefixObjectsWithMarkerAndDelimeter(objuuid, p
Delimiter: &delimeter,
}
err, resp := client.UrchinClient.ListObjects(ctx, req)
if nil != err {
return nil, err
}
if !resp.IsSuccess() {
return nil, resp.ToError()
}
return resp, err
}

@@ -265,7 +264,9 @@ func (client *UrchinV2Client) GetObject(objuuid, path string) (*obs.GetObjectOut
if err != nil {
return nil, err
}

if !objectResp.IsSuccess() {
return nil, objectResp.ToError()
}
output, err := client.ObsClient.GetObjectWithSignedUrl(
objectResp.SignedUrl,
http.Header{})
@@ -289,7 +290,9 @@ func (client *UrchinV2Client) GetObjectMeta(objuuid, path string) (*obs.GetObjec
if err != nil {
return nil, err
}

if !objectResp.IsSuccess() {
return nil, objectResp.ToError()
}
output, err := client.ObsClient.GetObjectMetadataWithSignedUrl(
objectResp.SignedUrl,
http.Header{})
@@ -315,8 +318,8 @@ func (client *UrchinV2Client) FinishSuccessTask(taskId int32) error {
if err != nil {
return err
}
if !IsUrchinRespSuccess(resp) {
return UrchinRespToError(resp)
if !resp.IsSuccess() {
return resp.ToError()
}
return nil
}
@@ -333,8 +336,8 @@ func (client *UrchinV2Client) FinishFailedTask(taskId int32) error {
if err != nil {
return err
}
if !IsUrchinRespSuccess(resp) {
return UrchinRespToError(resp)
if !resp.IsSuccess() {
return resp.ToError()
}
return nil
}
@@ -350,6 +353,9 @@ func (client *UrchinV2Client) GetObjectSignedUrl(objuuid, path string) (string,
if err != nil {
return "", err
}
if !objectResp.IsSuccess() {
return "", objectResp.ToError()
}
return objectResp.SignedUrl, nil
}

@@ -364,6 +370,12 @@ func (client *UrchinV2Client) ListPrefixObjectsWithMarker(objuuid string, marker
MaxKeys: &maxKey,
}
err, resp := client.UrchinClient.ListObjects(ctx, req)
if nil != err {
return nil, err
}
if !resp.IsSuccess() {
return nil, resp.ToError()
}
return resp, err
}

@@ -388,8 +400,8 @@ func (client *UrchinV2Client) DeleteFile(objuuid, sourcePath string) error {
if err != nil {
return err
}
if !IsUrchinRespSuccess(resp) {
return UrchinRespToError(resp)
if !resp.IsSuccess() {
return resp.ToError()
}

return nil
@@ -405,8 +417,8 @@ func (client *UrchinV2Client) DeleteObject(objuuid string) error {
if err != nil {
return err
}
if !IsUrchinRespSuccess(resp) {
return UrchinRespToError(resp)
if !resp.IsSuccess() {
return resp.ToError()
}

return nil
@@ -430,6 +442,9 @@ func (client *UrchinV2Client) InitiateMultipartUpload(objuuid, path string) (str
if err != nil {
return "", err
}
if !objectResp.IsSuccess() {
return "", objectResp.ToError()
}
output, err := client.ObsClient.InitiateMultipartUploadWithSignedUrl(
objectResp.SignedUrl,
http.Header{})
@@ -453,6 +468,9 @@ func (client *UrchinV2Client) CreateMultipartUploadSignedUrl(objuuid, uploadId,
if err != nil {
return "", err
}
if !output.IsSuccess() {
return "", output.ToError()
}
return output.SignedUrl, nil
}

@@ -467,6 +485,9 @@ func (client *UrchinV2Client) CompleteMultiPartUpload(objuuid, uploadId, source
if err != nil {
return err
}
if !urlOutput.IsSuccess() {
return urlOutput.ToError()
}

allParts, err := client.ListAllParts(objuuid, uploadId, source)
if err != nil {
@@ -529,6 +550,9 @@ func (client *UrchinV2Client) ListAllParts(objuuid, uploadID, path string) (outp
if err != nil {
return nil, err
}
if !objectResp.IsSuccess() {
return nil, objectResp.ToError()
}
temp, err := client.ObsClient.ListPartsWithSignedUrl(
objectResp.SignedUrl,
http.Header{})


+ 37
- 38
modules/urchin_v2/client/urchin_client.go View File

@@ -4,7 +4,6 @@ import (
"context"
"crypto/tls"
"encoding/json"
"errors"
"fmt"
"net"
"net/http"
@@ -155,7 +154,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -196,7 +195,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -237,7 +236,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -278,7 +277,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -319,7 +318,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -360,7 +359,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -401,7 +400,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -442,7 +441,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -483,7 +482,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -524,7 +523,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -565,7 +564,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -606,7 +605,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -647,7 +646,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -688,7 +687,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -729,7 +728,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -770,7 +769,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -811,7 +810,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -852,7 +851,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -893,7 +892,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -934,7 +933,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -975,7 +974,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1016,7 +1015,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1057,7 +1056,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1098,7 +1097,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1139,7 +1138,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1180,7 +1179,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1221,7 +1220,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1262,7 +1261,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1303,7 +1302,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1344,7 +1343,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1385,7 +1384,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1426,7 +1425,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1467,7 +1466,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1508,7 +1507,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1549,7 +1548,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1590,7 +1589,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp
@@ -1631,7 +1630,7 @@ sendjob:
_ = u.GetToken()
goto sendjob
}
return errors.New(resp.Message), resp
return nil, resp
}

return nil, resp


+ 87
- 0
modules/urchin_v2/module/urchin.go View File

@@ -2,6 +2,7 @@ package module

import (
"encoding/xml"
"fmt"
"time"
)

@@ -82,12 +83,32 @@ const (

TaskFResultESuccess = 1
TaskFResultEFailed = 2

UrchinSuccessCode = 0
ObjectStatusInvalidCode = 10350
)

var TaskTypeOnlyServiceRetry = map[int32]bool{
TaskTypeMigrate: true,
TaskTypeCopy: true}

type UrchinError interface {
ToError() error
IsSuccess() bool
}

type ErrObjectStatusInvalid struct {
}

func IsErrObjectStatusInvalid(err error) bool {
_, ok := err.(ErrObjectStatusInvalid)
return ok
}

func (err ErrObjectStatusInvalid) Error() string {
return fmt.Sprintf("dataset.resource_in_use")
}

type BaseResp struct {
// @inject_tag: json:"code"
Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code"`
@@ -97,6 +118,17 @@ type BaseResp struct {
RequestId string `protobuf:"bytes,3,opt,name=request_id,proto3" json:"request_id"`
}

func (r *BaseResp) ToError() error {
if r.Code == ObjectStatusInvalidCode {
return ErrObjectStatusInvalid{}
}
return fmt.Errorf("urchin operate error.[%d]%s", r.Code, r.Message)
}

func (r *BaseResp) IsSuccess() bool {
return r.Code == UrchinSuccessCode
}

type CreateInitiateMultipartUploadSignedUrlReq struct {
// @inject_tag: json:"task_id"
TaskId int32 `protobuf:"varint,1,opt,name=task_id,proto3" json:"task_id"`
@@ -265,6 +297,17 @@ type CreateSignedUrlResp struct {
Header map[string]*HeaderValues `protobuf:"bytes,5,rep,name=header,proto3" json:"header" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}

func (r *CreateSignedUrlResp) ToError() error {
if r.Code == ObjectStatusInvalidCode {
return ErrObjectStatusInvalid{}
}
return fmt.Errorf("urchin operate error.[%d]%s", r.Code, r.Message)
}

func (r *CreateSignedUrlResp) IsSuccess() bool {
return r.Code == UrchinSuccessCode
}

type HeaderValues struct {
// @inject_tag: json:"values"
Values []string `protobuf:"bytes,1,rep,name=values,proto3" json:"values"`
@@ -362,6 +405,17 @@ type CreateObjectResp struct {
DeploymentInfo *ObjDeploymentData `protobuf:"bytes,5,opt,name=deployment_info,proto3" json:"deployment_info"`
}

func (r *CreateObjectResp) ToError() error {
if r.Code == ObjectStatusInvalidCode {
return ErrObjectStatusInvalid{}
}
return fmt.Errorf("urchin operate error.[%d]%s", r.Code, r.Message)
}

func (r *CreateObjectResp) IsSuccess() bool {
return r.Code == UrchinSuccessCode
}

type UploadObjectReq struct {
// @inject_tag: json:"user_id"
UserId string `protobuf:"bytes,1,opt,name=user_id,proto3" json:"user_id"`
@@ -409,6 +463,17 @@ type UploadObjectResp struct {
ObjUuid string `protobuf:"bytes,7,opt,name=obj_uuid,proto3" json:"obj_uuid"`
}

func (r *UploadObjectResp) ToError() error {
if r.Code == ObjectStatusInvalidCode {
return ErrObjectStatusInvalid{}
}
return fmt.Errorf("urchin operate error.[%d]%s", r.Code, r.Message)
}

func (r *UploadObjectResp) IsSuccess() bool {
return r.Code == UrchinSuccessCode
}

type UploadFileReq struct {
// @inject_tag: json:"user_id"
UserId string `protobuf:"bytes,1,opt,name=user_id,proto3" json:"user_id"`
@@ -452,6 +517,17 @@ type UploadFileResp struct {
NodeName string `protobuf:"bytes,6,opt,name=node_name,proto3" json:"node_name"`
}

func (r *UploadFileResp) ToError() error {
if r.Code == ObjectStatusInvalidCode {
return ErrObjectStatusInvalid{}
}
return fmt.Errorf("urchin operate error.[%d]%s", r.Code, r.Message)
}

func (r *UploadFileResp) IsSuccess() bool {
return r.Code == UrchinSuccessCode
}

type DownloadFileReq struct {
// @inject_tag: json:"user_id"
UserId string `protobuf:"bytes,1,opt,name=user_id,proto3" json:"user_id"`
@@ -811,6 +887,17 @@ type ListObjectsResp struct {
Data ListObjectsRespData `protobuf:"bytes,4,opt,name=data,proto3" json:"data"`
}

func (r *ListObjectsResp) ToError() error {
if r.Code == ObjectStatusInvalidCode {
return ErrObjectStatusInvalid{}
}
return fmt.Errorf("urchin operate error.[%d]%s", r.Code, r.Message)
}

func (r *ListObjectsResp) IsSuccess() bool {
return r.Code == UrchinSuccessCode
}

type ListObjectsRespData struct {
// @inject_tag: json:"next_marker"
NextMarker string `protobuf:"bytes,1,opt,name=next_marker,proto3" json:"next_marker"`


+ 1
- 0
options/locale/locale_en-US.ini View File

@@ -976,6 +976,7 @@ description = Description
description_format_err=Description's length can be up to %s characters long.
dataset_name_exist = Dataset English name already exists
dataset_alias_exist = Dataset Chinese name already exists
resource_in_use = Resource is in use by task, operation not possible, please try again later.
over_preview_size = The file size exceeds the preview limit
unsupported_preview_file_type = The file type does not support preview
create_dataset = Create Dataset


+ 1
- 0
options/locale/locale_zh-CN.ini View File

@@ -985,6 +985,7 @@ description=描述
description_format_err=描述最多允许输入%s个字符。
dataset_name_exist = 数据集英文名称已存在。
dataset_alias_exist = 数据集中文名称已存在。
resource_in_use = 资源在被云脑任务使用中,无法执行此操作,请稍后重试
over_preview_size = 该文件大小超过了预览限制。
unsupported_preview_file_type = 该文件类型不支持预览。
create_dataset=创建数据集


BIN
public/img/domestic/biren.png View File

Before After
Width: 396  |  Height: 120  |  Size: 28 KiB

+ 12
- 11
routers/api/v1/aimodel/aimodel.go View File

@@ -2,6 +2,15 @@ package aimodel

import (
"archive/zip"
"errors"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"path"
"strconv"
"strings"

"code.gitea.io/gitea/entity"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
@@ -14,14 +23,6 @@ import (
"code.gitea.io/gitea/services/ai_task_service/storage_helper"
"code.gitea.io/gitea/services/dynconfig/fetcher"
"code.gitea.io/gitea/services/subject_service"
"errors"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"path"
"strconv"
"strings"
)

func CreateAimodel(ctx *context.Context, req entity.CreateAimodelReq) {
@@ -183,7 +184,7 @@ func DelAimodel(ctx *context.Context) {
aimodel := ctx.AccessContext.Aimodel
err := subject_service.DeleteAimodel(ctx.User, aimodel)
if err != nil {
ctx.JSON(http.StatusOK, response.ResponseError(err))
ctx.JSON(http.StatusOK, response.OuterTrBizError(response.NewBizError(err), ctx.Locale))
return
}
ctx.JSON(http.StatusOK, response.OuterSuccess())
@@ -245,7 +246,7 @@ func PutAimodelReadme(ctx *context.Context, req entity.AimodelReadmeReq) {
err := subject_service.PutAimodelReadme(req)
if err != nil {
log.Error("PutAimodelReadme failed err=%v", err)
ctx.JSON(http.StatusOK, response.ResponseError(err))
ctx.JSON(http.StatusOK, response.OuterTrBizError(response.NewBizError(err), ctx.Locale))
return
}
ctx.JSON(http.StatusOK, response.OuterSuccess())
@@ -477,7 +478,7 @@ func DeleteAimodelFile(ctx *context.Context) {
err := subject_service.DeleteAimodelFile(aimodel, parentDir, fileName)
if err != nil {
log.Error("DeleteAimodelFile failed, aimodel.ID=%s parentDir=%s fileName=%s err=%v", aimodel.ID, parentDir, fileName, err)
ctx.JSON(http.StatusOK, response.ResponseError(err))
ctx.JSON(http.StatusOK, response.OuterTrBizError(response.NewBizError(err), ctx.Locale))
return
}
ctx.JSON(http.StatusOK, response.OuterSuccess())


+ 3
- 3
routers/api/v1/dataset/dataset.go View File

@@ -148,7 +148,7 @@ func PutDatasetReadme(ctx *context.Context, req entity.DatasetReadmeReq) {
err := subject_service.PutDatasetReadme(req)
if err != nil {
log.Error("PutDatasetReadme failed err=%v", err)
ctx.JSON(http.StatusOK, response.ResponseError(err))
ctx.JSON(http.StatusOK, response.OuterTrBizError(response.NewBizError(err), ctx.Locale))
return
}
ctx.JSON(http.StatusOK, response.OuterSuccess())
@@ -710,7 +710,7 @@ func DeleteDatasetFile(ctx *context.Context) {
err := subject_service.DeleteDatasetFile(dataset, parentDir, fileName)
if err != nil {
log.Error("DeleteFile failed, dataset.ID=%s parentDir=%s fileName=%s err=%v", dataset.ID, parentDir, fileName, err)
ctx.JSON(http.StatusOK, response.ResponseError(err))
ctx.JSON(http.StatusOK, response.OuterTrBizError(response.NewBizError(err), ctx.Locale))
return
}
ctx.JSON(http.StatusOK, response.OuterSuccess())
@@ -1136,7 +1136,7 @@ func DelDataset(ctx *context.Context) {
dataset := ctx.AccessContext.Dataset
err := subject_service.DeleteDataset(ctx.User, dataset)
if err != nil {
ctx.JSON(http.StatusOK, response.ResponseError(err))
ctx.JSON(http.StatusOK, response.OuterTrBizError(response.NewBizError(err), ctx.Locale))
return
}
ctx.JSON(http.StatusOK, response.OuterSuccess())


+ 3
- 1
routers/response/response_list.go View File

@@ -55,8 +55,9 @@ var ENDPOINT_MUST_BE_VALID = &BizError{Code: 2033, DefaultMsg: "Custom paths can
var CAN_NOT_STOP_SAVING_IMAGE_JOB = &BizError{Code: 2034, DefaultMsg: "Cannot stop the AI task while it is saving the image.", TrCode: "ai_task.can_not_stop_saving_image_job"}
var CAN_NOT_FINETUNE_EXPERIENCE = &BizError{Code: 2035, DefaultMsg: "The task can not be exepirenced online.", TrCode: "ai_task.can_not_finetune_experience"}
var CAN_NOT_Eval = &BizError{Code: 2036, DefaultMsg: "The task can not be evaluated online.", TrCode: "ai_task.can_not_eval"}

var DATASET_CANNOT_READ = &BizError{Code: 2037, DefaultMsg: "Dataset select error: select dataset what you can read.", TrCode: "ai_task.dataset_cannot_read"}
var MODEL_CANNOT_READ = &BizError{Code: 2037, DefaultMsg: "Model select error: select model what you can read.", TrCode: "ai_task.model_cannot_read"}
var MODEL_CANNOT_READ = &BizError{Code: 2038, DefaultMsg: "Model select error: select model what you can read.", TrCode: "ai_task.model_cannot_read"}

// 登录相关错误
var QR_CODE_EXPIRED = &BizError{Code: 3001, DefaultMsg: "It has expired, please scan the QR code again", TrCode: "form.qr_code_expire"}
@@ -73,6 +74,7 @@ var DATASET_EXIST = &BizError{Code: 4007, DefaultMsg: "dataset exists", TrCode:
var DATASET_PATH_EMPTY = &BizError{Code: 4008, DefaultMsg: "dataset path empty", TrCode: ""}
var DATASET_ALIAS_INVALID = &BizError{Code: 4009, DefaultMsg: "Dataset alias is invalid", TrCode: "dataset.alias_format_err"}
var DATASET_ALIAS_EXIST = &BizError{Code: 4010, DefaultMsg: "Dataset alias already exists", TrCode: "dataset.dataset_alias_exist"}
var RESOURCE_IN_USE = &BizError{Code: 4011, DefaultMsg: "Resource is in use, operation not possible, please try again later.", TrCode: "dataset.resource_in_use"}

// 权限相关错误
var ORG_NOT_ALLOWED_TO_BE_COLLABORATOR = &BizError{Code: 5001, DefaultMsg: "Organizations cannot be added as a collaborator", TrCode: "access.org_not_allowed_to_be_collaborator"}


+ 22
- 14
services/subject_service/aimodel_service.go View File

@@ -154,23 +154,30 @@ func DeleteAimodel(doer *models.User, aimodel *models.AiModelManage) error {
return err
}

err = models.DeleteAimodel(doer, aimodel.OwnerID, aimodel.ID)
if err != nil {
log.Error("DeleteAimodel err,dataset=%+v,err=%v", aimodel, err)
}
go DeleteAimodelStorage(aimodel)
notification.NotifyDeleteAimodel(doer, owner, aimodel)

// delete hf transfer file record db
if aimodel.ModelType == models.MODEL_HF_TYPE {
err := models.DeleteHfFilesByModelId(aimodel.ID)
err = models.WithTx(func(ctx models.DBContext) error {
err := models.DeleteAimodel(ctx, doer, aimodel.OwnerID, aimodel.ID)
if err != nil {
log.Info("DeleteHfFilesByModelId error." + err.Error())
log.Error("DeleteAimodel err,dataset=%+v,err=%v", aimodel, err)
return err
}
}
err = DeleteAimodelStorage(aimodel)
if err != nil {
log.Error("DeleteAimodel DeleteAimodelStorage err,aimodel=%+v,err=%v", aimodel, err)
return err
}
// delete hf transfer file record db
if aimodel.ModelType == models.MODEL_HF_TYPE {
err := models.DeleteHfFilesByModelIdWithContext(ctx, aimodel.ID)
if err != nil {
log.Info("DeleteHfFilesByModelId error." + err.Error())
return err
}
}
notification.NotifyDeleteAimodel(doer, owner, aimodel)
return nil
})

return nil
return err
}

func DeleteAimodelStorage(aimodel *models.AiModelManage) error {
@@ -180,6 +187,7 @@ func DeleteAimodelStorage(aimodel *models.AiModelManage) error {
log.Error("PANIC:%v", combinedErr)
}
}()

helper := storage_helper.SelectStorageHelperFromStorageType(entity.StorageType(aimodel.StorageType))
if helper == nil {
log.Error("GetUploadHelper failed, dataType=%d", models.AimodelSubject)
@@ -189,7 +197,7 @@ func DeleteAimodelStorage(aimodel *models.AiModelManage) error {
if err == nil && remainingFiles {
tmpErr := models.InsertStorageDeleteFailedAimodel(aimodel)
if tmpErr != nil {
log.Error("InsertStorageDeleteFailedDataset failed, datasetId=%s, datasetName=%s err=%v", aimodel.ID, aimodel.Name, tmpErr)
log.Error("InsertStorageDeleteFailedAimodel failed, aimodelId=%s, datasetName=%s err=%v", aimodel.ID, aimodel.Name, tmpErr)
}
}
return err


+ 1
- 1
services/subject_service/dataset_service.go View File

@@ -267,7 +267,7 @@ func DeleteDataset(doer *models.User, dataset *models.DatasetRegistry) error {
return nil
})

return nil
return err
}

func DeleteDatasetStorage(dataset *models.DatasetRegistry) error {


+ 0
- 7
services/subject_service/upload_service.go View File

@@ -152,13 +152,6 @@ func NewUploadMultipart(req entity.NewMultipartRequest) (*entity.NewMuiltipartRe

isLimited := storage_limit.IsSubjectFileUploadOverLimit(req.Size, req.SubjectAccessContext)
if isLimited {
if req.SubjectAccessContext.Owner.IsOrganization() {
if req.SubjectAccessContext.SubjectType == models.DatasetSubject {
return nil, errors.New("dataset_registry.org_not_allowed_to_upload_dataset_file")
} else {
return nil, errors.New("aimodel.org_not_allowed_to_upload_aimodel_file")
}
}
return nil, errors.New("common_error.file_size_storage_limit")
}



+ 18
- 4
web_src/vuepages/pages/computingpower/domestic/index.vue View File

@@ -50,7 +50,7 @@
<template slot="empty">
<span style="font-size: 12px">{{
loading ? $t('loading') : $t('noData')
}}</span>
}}</span>
</template>
</el-table>
</div>
@@ -116,7 +116,8 @@ const manufacturerIconMap = {
cambricon: '/img/domestic/cambricon.svg',
iluvatar: '/img/domestic/iluvatar.svg',
metax: '/img/domestic/metax.svg',
hygon: '/img/domestic/hygon.png'
hygon: '/img/domestic/hygon.png',
biren: '/img/domestic/biren.png'
};

export default {
@@ -147,6 +148,7 @@ export default {
{ name: '', icon: manufacturerIconMap.iluvatar },
{ name: '', icon: manufacturerIconMap.metax },
{ name: '', icon: manufacturerIconMap.hygon },
{ name: '', icon: manufacturerIconMap.biren },
],
applyLink: 'https://openi.pcl.ac.cn/OpenIOSSG/promote/src/branch/master/XPRZ.md',
cards: [{
@@ -364,6 +366,18 @@ export default {
],
tableClass: 'average',
}
}, {
name: '壁砺™ 106M',
icon: manufacturerIconMap.biren,
descr: [
'壁仞科技通用GPU产品壁砺系列,由多款产品组成,基于壁仞科技原创的训推一体芯片架构,具有高算力、高能效比、高通用性的优势,能够为包括人工智能训练与推理在内的诸多通用计算场景提供强大的算力。壁砺™ 106M产品形态为风冷 OAM 模组,单卡峰值功耗 400W,强大的算力和高速互连能力,可为广泛的人工智能训练与推理场景,提供高能效比的算力解决方案。'
],
features: [
{ title: '通用智算,训推平衡', list: ['壁砺™166系列产品可广泛应用于AI模型训练、微调与推理场景,赋能大模型应用高效落地。壁砺™106M 支持PCIe5.0 X8 主机互连接口技术,并通过自研UBB 主板实现单机8 卡互连。'], },
{ title: '原创设计,软硬协同', list: ['BIRENSUPA™是一个具有完整功能架构的软件开发平台,包括硬件抽象层、壁仞原创BIRENSUPA™编程模型和BRCC编译器,深度学习和通用计算加速库、工具链,支持主流深度学习框架和自研推理加速引擎,并配备针对不同场景的应用SDK等,能够为开发者提供高效的应用开发平台,软硬件协同,探索未来的无限可能。'], },
{ title: '异构聚合,技术创新', list: ['业界首次支持4种异构GPU千卡规模混合训练同一个大模型,异构协同训练效率超过98.5%,助力最终客户实现多种异构算力聚合,最大化提升异构GPU集群利用效率,引领国家标准和行业发展。', '目前,壁砺系列成功在华北、华东、华南等多地的智算中心与终端应用客户处落地,支持包括互联网、能源、金融、教育等众多应用场景。在AI大模型训练与推理场景中,壁仞科技也已经与众多合作伙伴开展落地合作,并完成了主流大模型的适配与调优。'], },
{ title: '智算一体机', list: ['基于壁仞科技 芯片产品与服务器整机厂商合作推出 大模型一体机,已在政务、能源、运营商、科技、金融等行业领域实现广泛应用,具体应用场景包括企业知识库助手、公文报告生成、智慧运维、智慧合规审查、代码助手等。软硬件深度融合,应用高效迁移,产品开箱即用,助力企业快速部署与落地。'], },
],
}]
};
},
@@ -602,9 +616,9 @@ export default {
flex-wrap: wrap;

.img-c {
width: 200px;
width: 170px;
height: 80px;
margin: 10px 20px;
margin: 10px 16px;
display: flex;
align-items: center;
justify-content: center;


+ 2
- 2
web_src/vuepages/pages/guide/components/FileUpload.vue View File

@@ -380,10 +380,10 @@ export default {
console.log('getNewMultipart', err);
this.$message({
type: 'error',
message: err,
message: err.message,
});
this.uploading = false
this.uploadError(file, info);
this.uploadError(file, this.$t('modelManage.uploadFailed'));
this.updateFileStatus(file, this.$t('modelManage.uploadFailed'), 0, 2);
return err;
});


Loading…
Cancel
Save
Baidu
map