| @@ -205,7 +205,7 @@ type Cloudbrain struct { | |||||
| BenchmarkTypeRankLink string `xorm:"-"` | BenchmarkTypeRankLink string `xorm:"-"` | ||||
| StartTime timeutil.TimeStamp | StartTime timeutil.TimeStamp | ||||
| EndTime timeutil.TimeStamp | EndTime timeutil.TimeStamp | ||||
| Cleared bool `xorm:"DEFAULT false"` | |||||
| Cleared bool `xorm:"DEFAULT false"` | |||||
| Spec *Specification `xorm:"-"` | Spec *Specification `xorm:"-"` | ||||
| } | } | ||||
| @@ -1823,7 +1823,7 @@ func QueryModelTrainJobVersionList(jobId string) ([]*Cloudbrain, int, error) { | |||||
| return cloudbrains, int(len(cloudbrains)), nil | return cloudbrains, int(len(cloudbrains)), nil | ||||
| } | } | ||||
| func QueryModelTrainJobList(repoId int64) ([]*CloudbrainInfo, int, error) { | |||||
| func QueryModelTrainJobList(repoId int64) ([]*Cloudbrain, int, error) { | |||||
| sess := x.NewSession() | sess := x.NewSession() | ||||
| defer sess.Close() | defer sess.Close() | ||||
| var cond = builder.NewCond() | var cond = builder.NewCond() | ||||
| @@ -1840,14 +1840,14 @@ func QueryModelTrainJobList(repoId int64) ([]*CloudbrainInfo, int, error) { | |||||
| // builder.In("type", 0, 1), | // builder.In("type", 0, 1), | ||||
| // ) | // ) | ||||
| cloudbrains := make([]*CloudbrainInfo, 0) | |||||
| cloudbrains := make([]*Cloudbrain, 0) | |||||
| if err := sess.Select("job_id,display_job_name").Table(&Cloudbrain{}).Where(cond).OrderBy("created_unix DESC"). | if err := sess.Select("job_id,display_job_name").Table(&Cloudbrain{}).Where(cond).OrderBy("created_unix DESC"). | ||||
| Find(&cloudbrains); err != nil { | Find(&cloudbrains); err != nil { | ||||
| return nil, 0, fmt.Errorf("Find: %v", err) | return nil, 0, fmt.Errorf("Find: %v", err) | ||||
| } | } | ||||
| keys := make(map[string]string) | keys := make(map[string]string) | ||||
| uniqueElements := make([]*CloudbrainInfo, 0) | |||||
| uniqueElements := make([]*Cloudbrain, 0) | |||||
| for _, entry := range cloudbrains { | for _, entry := range cloudbrains { | ||||
| if _, value := keys[entry.JobID]; !value { | if _, value := keys[entry.JobID]; !value { | ||||
| keys[entry.JobID] = entry.DisplayJobName | keys[entry.JobID] = entry.DisplayJobName | ||||
| @@ -1988,7 +1988,7 @@ func GetCloudbrainByID(id string) (*Cloudbrain, error) { | |||||
| return getRepoCloudBrain(cb) | return getRepoCloudBrain(cb) | ||||
| } | } | ||||
| func IsCloudbrainExistByJobName(jobName string)(bool,error){ | |||||
| func IsCloudbrainExistByJobName(jobName string) (bool, error) { | |||||
| return x.Unscoped().Exist(&Cloudbrain{ | return x.Unscoped().Exist(&Cloudbrain{ | ||||
| JobName: jobName, | JobName: jobName, | ||||
| }) | }) | ||||
| @@ -2181,25 +2181,25 @@ func GetCloudBrainOneStoppedNotDebugJobDaysAgo(days int, limit int) ([]*Cloudbra | |||||
| Limit(limit). | Limit(limit). | ||||
| Find(&cloudbrains) | Find(&cloudbrains) | ||||
| } | } | ||||
| /** | /** | ||||
| 本方法考虑了再次调试的情况,多次调试取最后一次的任务的结束时间 | 本方法考虑了再次调试的情况,多次调试取最后一次的任务的结束时间 | ||||
| */ | |||||
| */ | |||||
| func GetCloudBrainOneStoppedDebugJobDaysAgo(days int, limit int) ([]*Cloudbrain, error) { | func GetCloudBrainOneStoppedDebugJobDaysAgo(days int, limit int) ([]*Cloudbrain, error) { | ||||
| cloudbrains := make([]*Cloudbrain, 0, 10) | cloudbrains := make([]*Cloudbrain, 0, 10) | ||||
| endTimeBefore := time.Now().Unix() - int64(days)*24*3600 | endTimeBefore := time.Now().Unix() - int64(days)*24*3600 | ||||
| missEndTimeBefore := endTimeBefore - 24*3600 | missEndTimeBefore := endTimeBefore - 24*3600 | ||||
| sql:=`SELECT id,job_name,job_id from (SELECT DISTINCT ON (job_name) | |||||
| sql := `SELECT id,job_name,job_id from (SELECT DISTINCT ON (job_name) | |||||
| id, job_name, job_id,status,end_time,updated_unix,cleared | id, job_name, job_id,status,end_time,updated_unix,cleared | ||||
| FROM cloudbrain | FROM cloudbrain | ||||
| where type=0 and job_type='DEBUG' | where type=0 and job_type='DEBUG' | ||||
| ORDER BY job_name, updated_unix DESC) a | ORDER BY job_name, updated_unix DESC) a | ||||
| where status in ('STOPPED','SUCCEEDED','FAILED') and (((end_time is null or end_time=0) and updated_unix<? and updated_unix != 0 ) or (end_time<? and end_time != 0)) and cleared=false` | where status in ('STOPPED','SUCCEEDED','FAILED') and (((end_time is null or end_time=0) and updated_unix<? and updated_unix != 0 ) or (end_time<? and end_time != 0)) and cleared=false` | ||||
| return cloudbrains, x.Unscoped().SQL(sql,missEndTimeBefore, endTimeBefore).Limit(limit).Find(&cloudbrains) | |||||
| return cloudbrains, x.Unscoped().SQL(sql, missEndTimeBefore, endTimeBefore).Limit(limit).Find(&cloudbrains) | |||||
| } | } | ||||
| func UpdateCloudBrainRecordsCleared(ids []int64) error { | func UpdateCloudBrainRecordsCleared(ids []int64) error { | ||||
| pageSize := 150 | pageSize := 150 | ||||
| n := len(ids) / pageSize | n := len(ids) / pageSize | ||||
| @@ -34,8 +34,7 @@ func ToCloudBrain(task *models.Cloudbrain) *api.Cloudbrain { | |||||
| StartTime: int64(task.StartTime), | StartTime: int64(task.StartTime), | ||||
| EndTime: int64(task.EndTime), | EndTime: int64(task.EndTime), | ||||
| Spec: ToSpecification(task.Spec), | |||||
| Spec: ToSpecification(task.Spec), | |||||
| } | } | ||||
| } | } | ||||
| func ToAttachment(attachment *models.Attachment) *api.AttachmentShow { | func ToAttachment(attachment *models.Attachment) *api.AttachmentShow { | ||||
| @@ -89,6 +88,9 @@ func ToDataset(dataset *models.Dataset) *api.Dataset { | |||||
| } | } | ||||
| func ToSpecification(s *models.Specification) *api.SpecificationShow { | func ToSpecification(s *models.Specification) *api.SpecificationShow { | ||||
| if s == nil { | |||||
| return nil | |||||
| } | |||||
| return &api.SpecificationShow{ | return &api.SpecificationShow{ | ||||
| ID: s.ID, | ID: s.ID, | ||||
| AccCardsNum: s.AccCardsNum, | AccCardsNum: s.AccCardsNum, | ||||
| @@ -577,6 +577,7 @@ static.CloudBrainTaskNum=CloudBrain Task Count | |||||
| static.CloudBrainRunTime=CloudBrain Run Time | static.CloudBrainRunTime=CloudBrain Run Time | ||||
| static.CommitDatasetNum=Commit Dataset Count | static.CommitDatasetNum=Commit Dataset Count | ||||
| static.CommitModelCount=Commit Model Count | static.CommitModelCount=Commit Model Count | ||||
| static.ModelConvertCount=Model Convert Count | |||||
| static.UserIndex=Normalized user index | static.UserIndex=Normalized user index | ||||
| static.UserIndexPrimitive=User Index | static.UserIndexPrimitive=User Index | ||||
| static.countdate=Count Date | static.countdate=Count Date | ||||
| @@ -581,6 +581,7 @@ static.CloudBrainTaskNum=云脑任务数 | |||||
| static.CloudBrainRunTime=云脑运行时间(小时) | static.CloudBrainRunTime=云脑运行时间(小时) | ||||
| static.CommitDatasetNum=上传(提交)数据集文件数 | static.CommitDatasetNum=上传(提交)数据集文件数 | ||||
| static.CommitModelCount=提交模型数 | static.CommitModelCount=提交模型数 | ||||
| static.ModelConvertCount=模型转换数 | |||||
| static.UserIndex=归一化用户指数 | static.UserIndex=归一化用户指数 | ||||
| static.UserIndexPrimitive=用户指数 | static.UserIndexPrimitive=用户指数 | ||||
| static.countdate=系统统计时间 | static.countdate=系统统计时间 | ||||
| @@ -1672,7 +1673,7 @@ issues.action_assignee_no_select=未指派 | |||||
| issues.opened_by=由 <a href="%[2]s">%[3]s</a> 于 %[1]s创建 | issues.opened_by=由 <a href="%[2]s">%[3]s</a> 于 %[1]s创建 | ||||
| pulls.merged_by=由 <a href="%[2]s">%[3]s</a> 于 %[1]s 合并 | pulls.merged_by=由 <a href="%[2]s">%[3]s</a> 于 %[1]s 合并 | ||||
| pulls.merged_by_fake=由 %[2]s 于 %[1]s 合并 | pulls.merged_by_fake=由 %[2]s 于 %[1]s 合并 | ||||
| issues.closed_by=按 <a href="%[2]s">%[3]s</a> 关闭%[1]s | |||||
| issues.closed_by=由 <a href="%[2]s">%[3]s</a> 创建,被关闭于 %[1]s | |||||
| issues.opened_by_fake=由 %[2]s 于 %[1]s创建 | issues.opened_by_fake=由 %[2]s 于 %[1]s创建 | ||||
| issues.closed_by_fake=通过 %[2]s 关闭 %[1]s | issues.closed_by_fake=通过 %[2]s 关闭 %[1]s | ||||
| issues.previous=上一页 | issues.previous=上一页 | ||||
| @@ -1024,6 +1024,8 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| m.Get("/query_model_byName", repo.QueryModelByName) | m.Get("/query_model_byName", repo.QueryModelByName) | ||||
| m.Get("/query_model_for_predict", repo.QueryModelListForPredict) | m.Get("/query_model_for_predict", repo.QueryModelListForPredict) | ||||
| m.Get("/query_modelfile_for_predict", repo.QueryModelFileForPredict) | m.Get("/query_modelfile_for_predict", repo.QueryModelFileForPredict) | ||||
| m.Get("/query_train_job", repo.QueryTrainJobList) | |||||
| m.Get("/query_train_job_version", repo.QueryTrainJobVersionList) | |||||
| m.Get("/query_train_model", repo.QueryTrainModelList) | m.Get("/query_train_model", repo.QueryTrainModelList) | ||||
| m.Post("/create_model_convert", repo.CreateModelConvert) | m.Post("/create_model_convert", repo.CreateModelConvert) | ||||
| m.Post("/convert_stop", repo.StopModelConvert) | m.Post("/convert_stop", repo.StopModelConvert) | ||||
| @@ -4,8 +4,10 @@ import ( | |||||
| "net/http" | "net/http" | ||||
| "code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
| "code.gitea.io/gitea/modules/convert" | |||||
| "code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
| "code.gitea.io/gitea/modules/storage" | "code.gitea.io/gitea/modules/storage" | ||||
| api "code.gitea.io/gitea/modules/structs" | |||||
| routerRepo "code.gitea.io/gitea/routers/repo" | routerRepo "code.gitea.io/gitea/routers/repo" | ||||
| ) | ) | ||||
| @@ -54,6 +56,21 @@ func QueryModelListForPredict(ctx *context.APIContext) { | |||||
| routerRepo.QueryModelListForPredict(ctx.Context) | routerRepo.QueryModelListForPredict(ctx.Context) | ||||
| } | } | ||||
| func QueryTrainJobList(ctx *context.APIContext) { | |||||
| result, err := routerRepo.QueryTrainJobListApi(ctx.Context) | |||||
| if err != nil { | |||||
| log.Info("query error." + err.Error()) | |||||
| ctx.JSON(http.StatusOK, nil) | |||||
| } else { | |||||
| re := make([]*api.Cloudbrain, 0) | |||||
| for _, task := range result { | |||||
| conRe := convert.ToCloudBrain(task) | |||||
| re = append(re, conRe) | |||||
| } | |||||
| ctx.JSON(http.StatusOK, re) | |||||
| } | |||||
| } | |||||
| func QueryTrainModelList(ctx *context.APIContext) { | func QueryTrainModelList(ctx *context.APIContext) { | ||||
| result, err := routerRepo.QueryTrainModelFileById(ctx.Context) | result, err := routerRepo.QueryTrainModelFileById(ctx.Context) | ||||
| if err != nil { | if err != nil { | ||||
| @@ -63,6 +80,21 @@ func QueryTrainModelList(ctx *context.APIContext) { | |||||
| ctx.JSON(http.StatusOK, re) | ctx.JSON(http.StatusOK, re) | ||||
| } | } | ||||
| func QueryTrainJobVersionList(ctx *context.APIContext) { | |||||
| result, err := routerRepo.QueryTrainJobVersionListApi(ctx.Context) | |||||
| if err != nil { | |||||
| log.Info("query error." + err.Error()) | |||||
| ctx.JSON(http.StatusOK, nil) | |||||
| } else { | |||||
| re := make([]*api.Cloudbrain, 0) | |||||
| for _, task := range result { | |||||
| conRe := convert.ToCloudBrain(task) | |||||
| re = append(re, conRe) | |||||
| } | |||||
| ctx.JSON(http.StatusOK, re) | |||||
| } | |||||
| } | |||||
| func convertFileFormat(result []storage.FileInfo) []FileInfo { | func convertFileFormat(result []storage.FileInfo) []FileInfo { | ||||
| re := make([]FileInfo, 0) | re := make([]FileInfo, 0) | ||||
| if result != nil { | if result != nil { | ||||
| @@ -2,7 +2,6 @@ package repo | |||||
| import ( | import ( | ||||
| "archive/zip" | "archive/zip" | ||||
| "code.gitea.io/gitea/services/repository" | |||||
| "encoding/json" | "encoding/json" | ||||
| "errors" | "errors" | ||||
| "fmt" | "fmt" | ||||
| @@ -12,6 +11,8 @@ import ( | |||||
| "regexp" | "regexp" | ||||
| "strings" | "strings" | ||||
| "code.gitea.io/gitea/services/repository" | |||||
| "code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
| "code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
| "code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
| @@ -710,36 +711,42 @@ func downloadFromCloudBrainTwo(path string, task *models.AiModelManage, ctx *con | |||||
| } | } | ||||
| func QueryTrainJobVersionList(ctx *context.Context) { | func QueryTrainJobVersionList(ctx *context.Context) { | ||||
| VersionListTasks, err := QueryTrainJobVersionListApi(ctx) | |||||
| if err != nil { | |||||
| ctx.JSON(200, nil) | |||||
| } else { | |||||
| ctx.JSON(200, VersionListTasks) | |||||
| } | |||||
| } | |||||
| func QueryTrainJobVersionListApi(ctx *context.Context) ([]*models.Cloudbrain, error) { | |||||
| log.Info("query train job version list. start.") | log.Info("query train job version list. start.") | ||||
| JobID := ctx.Query("jobId") | JobID := ctx.Query("jobId") | ||||
| if JobID == "" { | if JobID == "" { | ||||
| JobID = ctx.Query("JobId") | JobID = ctx.Query("JobId") | ||||
| } | } | ||||
| VersionListTasks, count, err := models.QueryModelTrainJobVersionList(JobID) | VersionListTasks, count, err := models.QueryModelTrainJobVersionList(JobID) | ||||
| log.Info("query return count=" + fmt.Sprint(count)) | log.Info("query return count=" + fmt.Sprint(count)) | ||||
| return VersionListTasks, err | |||||
| } | |||||
| func QueryTrainJobList(ctx *context.Context) { | |||||
| VersionListTasks, err := QueryTrainJobListApi(ctx) | |||||
| if err != nil { | if err != nil { | ||||
| ctx.ServerError("QueryTrainJobList:", err) | |||||
| ctx.JSON(200, nil) | |||||
| } else { | } else { | ||||
| ctx.JSON(200, VersionListTasks) | ctx.JSON(200, VersionListTasks) | ||||
| } | } | ||||
| } | } | ||||
| func QueryTrainJobList(ctx *context.Context) { | |||||
| log.Info("query train job list. start.") | |||||
| func QueryTrainJobListApi(ctx *context.Context) ([]*models.Cloudbrain, error) { | |||||
| repoId := ctx.QueryInt64("repoId") | repoId := ctx.QueryInt64("repoId") | ||||
| VersionListTasks, count, err := models.QueryModelTrainJobList(repoId) | VersionListTasks, count, err := models.QueryModelTrainJobList(repoId) | ||||
| log.Info("query return count=" + fmt.Sprint(count)) | log.Info("query return count=" + fmt.Sprint(count)) | ||||
| if err != nil { | |||||
| ctx.ServerError("QueryTrainJobList:", err) | |||||
| } else { | |||||
| ctx.JSON(200, VersionListTasks) | |||||
| } | |||||
| return VersionListTasks, err | |||||
| } | } | ||||
| func QueryTrainModelFileById(ctx *context.Context) ([]storage.FileInfo, error) { | func QueryTrainModelFileById(ctx *context.Context) ([]storage.FileInfo, error) { | ||||
| @@ -1641,6 +1641,21 @@ func CloudBrainDownloadModel(ctx *context.Context) { | |||||
| ctx.Resp.Header().Set("Cache-Control", "max-age=0") | ctx.Resp.Header().Set("Cache-Control", "max-age=0") | ||||
| http.Redirect(ctx.Resp, ctx.Req.Request, url, http.StatusMovedPermanently) | http.Redirect(ctx.Resp, ctx.Req.Request, url, http.StatusMovedPermanently) | ||||
| } | } | ||||
| func CloudBrainDownloadMultiModel(ctx *context.Context) { | |||||
| parentDir := ctx.Query("parentDir") | |||||
| jobName := ctx.Query("jobName") | |||||
| filePath := "jobs/" + jobName + "/model/" + parentDir | |||||
| allFile, err := storage.GetAllObjectByBucketAndPrefixMinio(setting.Attachment.Minio.Bucket, filePath) | |||||
| if err == nil { | |||||
| returnFileName := jobName + ".zip" | |||||
| MinioDownloadManyFile(filePath, ctx, returnFileName, allFile) | |||||
| } else { | |||||
| log.Info("error,msg=" + err.Error()) | |||||
| ctx.ServerError("no file to download.", err) | |||||
| } | |||||
| } | |||||
| func CloudBrainDownloadInferenceResult(ctx *context.Context) { | func CloudBrainDownloadInferenceResult(ctx *context.Context) { | ||||
| parentDir := ctx.Query("parentDir") | parentDir := ctx.Query("parentDir") | ||||
| fileName := ctx.Query("fileName") | fileName := ctx.Query("fileName") | ||||
| @@ -2657,6 +2657,44 @@ func InferenceJobShow(ctx *context.Context) { | |||||
| ctx.HTML(http.StatusOK, tplModelArtsInferenceJobShow) | ctx.HTML(http.StatusOK, tplModelArtsInferenceJobShow) | ||||
| } | } | ||||
| func MultiModelDownload(ctx *context.Context) { | |||||
| var ( | |||||
| err error | |||||
| ) | |||||
| jobID := ctx.Params(":jobid") | |||||
| versionName := ctx.Query("version_name") | |||||
| parentDir := ctx.Query("parent_dir") | |||||
| task, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName) | |||||
| if err != nil { | |||||
| log.Error("GetCloudbrainByJobIDAndVersionName(%s) failed:%v", task.JobName, err.Error()) | |||||
| return | |||||
| } | |||||
| if task.ComputeResource == models.NPUResource { | |||||
| path := strings.TrimPrefix(path.Join(setting.TrainJobModelPath, task.JobName, setting.OutPutPath, versionName, parentDir), "/") | |||||
| allFile, err := storage.GetAllObjectByBucketAndPrefix(setting.Bucket, path) | |||||
| if err == nil { | |||||
| returnFileName := task.DisplayJobName + ".zip" | |||||
| ObsDownloadManyFile(path, ctx, returnFileName, allFile) | |||||
| } else { | |||||
| log.Info("error,msg=" + err.Error()) | |||||
| ctx.ServerError("no file to download.", err) | |||||
| } | |||||
| } else if task.ComputeResource == models.GPUResource { | |||||
| filePath := setting.CBCodePathPrefix + task.JobName + cloudbrain.ModelMountPath + "/" + parentDir | |||||
| allFile, err := storage.GetAllObjectByBucketAndPrefixMinio(setting.Attachment.Minio.Bucket, filePath) | |||||
| if err == nil { | |||||
| returnFileName := task.DisplayJobName + ".zip" | |||||
| MinioDownloadManyFile(filePath, ctx, returnFileName, allFile) | |||||
| } else { | |||||
| log.Info("error,msg=" + err.Error()) | |||||
| ctx.ServerError("no file to download.", err) | |||||
| } | |||||
| } | |||||
| } | |||||
| func ModelDownload(ctx *context.Context) { | func ModelDownload(ctx *context.Context) { | ||||
| var ( | var ( | ||||
| err error | err error | ||||
| @@ -1186,6 +1186,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| m.Get("/rate", reqRepoCloudBrainReader, repo.GetRate) | m.Get("/rate", reqRepoCloudBrainReader, repo.GetRate) | ||||
| m.Get("/models", reqRepoCloudBrainReader, repo.CloudBrainShowModels) | m.Get("/models", reqRepoCloudBrainReader, repo.CloudBrainShowModels) | ||||
| m.Get("/download_model", cloudbrain.AdminOrJobCreaterRight, repo.CloudBrainDownloadModel) | m.Get("/download_model", cloudbrain.AdminOrJobCreaterRight, repo.CloudBrainDownloadModel) | ||||
| m.Get("/download_multi_model", cloudbrain.AdminOrJobCreaterRight, repo.CloudBrainDownloadMultiModel) | |||||
| }) | }) | ||||
| m.Get("/create", reqWechatBind, reqRepoCloudBrainWriter, context.PointAccount(), repo.CloudBrainNew) | m.Get("/create", reqWechatBind, reqRepoCloudBrainWriter, context.PointAccount(), repo.CloudBrainNew) | ||||
| m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, bindIgnErr(auth.CreateCloudBrainForm{}), repo.CloudBrainCreate) | m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, bindIgnErr(auth.CreateCloudBrainForm{}), repo.CloudBrainCreate) | ||||
| @@ -1209,6 +1210,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.CloudBrainTrainJobDel) | m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.CloudBrainTrainJobDel) | ||||
| //m.Get("/models", reqRepoCloudBrainReader, repo.CloudBrainShowModels) | //m.Get("/models", reqRepoCloudBrainReader, repo.CloudBrainShowModels) | ||||
| m.Get("/download_model", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.CloudBrainDownloadModel) | m.Get("/download_model", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.CloudBrainDownloadModel) | ||||
| m.Get("/download_multi_model", cloudbrain.AdminOrJobCreaterRight, repo.CloudBrainDownloadMultiModel) | |||||
| //m.Get("/get_log", cloudbrain.AdminOrJobCreaterRightForTrain, repo.GetLogFromModelDir) | //m.Get("/get_log", cloudbrain.AdminOrJobCreaterRightForTrain, repo.GetLogFromModelDir) | ||||
| //m.Post("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, bindIgnErr(auth.CreateModelArtsTrainJobForm{}), repo.TrainJobCreateVersion) | //m.Post("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, bindIgnErr(auth.CreateModelArtsTrainJobForm{}), repo.TrainJobCreateVersion) | ||||
| m.Get("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, repo.CloudBrainTrainJobVersionNew) | m.Get("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, repo.CloudBrainTrainJobVersionNew) | ||||
| @@ -1221,7 +1223,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| m.Group("/:jobid", func() { | m.Group("/:jobid", func() { | ||||
| m.Get("", reqRepoCloudBrainReader, repo.InferenceCloudBrainJobShow) | m.Get("", reqRepoCloudBrainReader, repo.InferenceCloudBrainJobShow) | ||||
| m.Get("/result_download", cloudbrain.AdminOrJobCreaterRightForTrain, repo.CloudBrainDownloadInferenceResult) | m.Get("/result_download", cloudbrain.AdminOrJobCreaterRightForTrain, repo.CloudBrainDownloadInferenceResult) | ||||
| m.Get("/download_multi_model", cloudbrain.AdminOrJobCreaterRight, repo.CloudBrainDownloadMultiModel) | |||||
| m.Get("/downloadall", repo.DownloadInferenceResultFile) | m.Get("/downloadall", repo.DownloadInferenceResultFile) | ||||
| }) | }) | ||||
| m.Get("/create", reqWechatBind, reqRepoCloudBrainWriter, context.PointAccount(), repo.InferenceCloudBrainJobNew) | m.Get("/create", reqWechatBind, reqRepoCloudBrainWriter, context.PointAccount(), repo.InferenceCloudBrainJobNew) | ||||