| @@ -16,6 +16,7 @@ import ( | |||||
| "fmt" | "fmt" | ||||
| _ "image/jpeg" // Needed for jpeg support | _ "image/jpeg" // Needed for jpeg support | ||||
| "image/png" | "image/png" | ||||
| "math/rand" | |||||
| "os" | "os" | ||||
| "path/filepath" | "path/filepath" | ||||
| "regexp" | "regexp" | ||||
| @@ -495,7 +496,11 @@ func (u *User) RealSizedAvatarLink(size int) string { | |||||
| // may either be a sub-URL to this site, or a full URL to an external avatar | // may either be a sub-URL to this site, or a full URL to an external avatar | ||||
| // service. | // service. | ||||
| func (u *User) RelAvatarLink() string { | func (u *User) RelAvatarLink() string { | ||||
| return u.SizedRelAvatarLink(base.DefaultAvatarSize) | |||||
| append := "" | |||||
| if u.UseCustomAvatar { | |||||
| append = "?" + fmt.Sprint(rand.Intn(100)) | |||||
| } | |||||
| return u.SizedRelAvatarLink(base.DefaultAvatarSize) + append | |||||
| } | } | ||||
| // AvatarLink returns user avatar absolute link. | // AvatarLink returns user avatar absolute link. | ||||
| @@ -28,9 +28,9 @@ func ToCloudBrain(task *models.Cloudbrain) *api.Cloudbrain { | |||||
| BootFile: task.BootFile, | BootFile: task.BootFile, | ||||
| Description: task.Description, | Description: task.Description, | ||||
| ModelName: task.ModelName, | ModelName: task.ModelName, | ||||
| ModelVersion: task.ModelVersion, | |||||
| CkptName: task.CkptName, | |||||
| VersionName: task.VersionName, | |||||
| ModelVersion: task.ModelVersion, | |||||
| CkptName: task.CkptName, | |||||
| StartTime: int64(task.StartTime), | StartTime: int64(task.StartTime), | ||||
| EndTime: int64(task.EndTime), | EndTime: int64(task.EndTime), | ||||
| @@ -51,33 +51,33 @@ type CreateFileNotebookJobOption struct { | |||||
| } | } | ||||
| type Cloudbrain struct { | type Cloudbrain struct { | ||||
| ID int64 `json:"id"` | |||||
| JobID string `json:"job_id"` | |||||
| JobType string `json:"job_type"` | |||||
| Type int `json:"type"` | |||||
| DisplayJobName string `json:"display_job_name"` | |||||
| Status string `json:"status"` | |||||
| CreatedUnix int64 `json:"created_unix"` | |||||
| RepoID int64 `json:"repo_id"` | |||||
| Duration int64 `json:"duration"` //运行时长 单位秒 | |||||
| TrainJobDuration string `json:"train_job_duration"` | |||||
| ImageID string `json:"image_id"` //grampus image_id | |||||
| Image string `json:"image"` | |||||
| Uuid string `json:"uuid"` //数据集id | |||||
| DatasetName string `json:"dataset_name"` | |||||
| ComputeResource string `json:"compute_resource"` //计算资源,例如npu | |||||
| AiCenter string `json:"ai_center"` //grampus ai center: center_id+center_name | |||||
| BranchName string `json:"branch_name"` //分支名称 | |||||
| Parameters string `json:"parameters"` //传给modelarts的param参数 | |||||
| BootFile string `json:"boot_file"` //启动文件 | |||||
| Description string `json:"description"` //描述 | |||||
| ModelName string `json:"model_name"` //模型名称 | |||||
| ModelVersion string `json:"model_version"` //模型版本 | |||||
| CkptName string `json:"ckpt_name"` //权重文件名称 | |||||
| StartTime int64 `json:"start_time"` | |||||
| EndTime int64 `json:"end_time"` | |||||
| Spec *SpecificationShow `json:"spec"` | |||||
| ID int64 `json:"id"` | |||||
| JobID string `json:"job_id"` | |||||
| JobType string `json:"job_type"` | |||||
| Type int `json:"type"` | |||||
| DisplayJobName string `json:"display_job_name"` | |||||
| Status string `json:"status"` | |||||
| CreatedUnix int64 `json:"created_unix"` | |||||
| RepoID int64 `json:"repo_id"` | |||||
| Duration int64 `json:"duration"` //运行时长 单位秒 | |||||
| TrainJobDuration string `json:"train_job_duration"` | |||||
| ImageID string `json:"image_id"` //grampus image_id | |||||
| Image string `json:"image"` | |||||
| Uuid string `json:"uuid"` //数据集id | |||||
| DatasetName string `json:"dataset_name"` | |||||
| ComputeResource string `json:"compute_resource"` //计算资源,例如npu | |||||
| AiCenter string `json:"ai_center"` //grampus ai center: center_id+center_name | |||||
| BranchName string `json:"branch_name"` //分支名称 | |||||
| Parameters string `json:"parameters"` //传给modelarts的param参数 | |||||
| BootFile string `json:"boot_file"` //启动文件 | |||||
| Description string `json:"description"` //描述 | |||||
| ModelName string `json:"model_name"` //模型名称 | |||||
| ModelVersion string `json:"model_version"` //模型版本 | |||||
| CkptName string `json:"ckpt_name"` //权重文件名称 | |||||
| StartTime int64 `json:"start_time"` | |||||
| EndTime int64 `json:"end_time"` | |||||
| VersionName string `json:"version_name"` | |||||
| Spec *SpecificationShow `json:"spec"` | |||||
| } | } | ||||
| type SpecificationShow struct { | type SpecificationShow struct { | ||||
| @@ -549,6 +549,8 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| }, reqToken()) | }, reqToken()) | ||||
| m.Get("/compute-nodes", reqToken(), user.GetComputeNodes) | |||||
| // Notifications | // Notifications | ||||
| m.Group("/notifications", func() { | m.Group("/notifications", func() { | ||||
| m.Combo(""). | m.Combo(""). | ||||
| @@ -5,6 +5,7 @@ | |||||
| package user | package user | ||||
| import ( | import ( | ||||
| "code.gitea.io/gitea/modules/modelarts" | |||||
| "net/http" | "net/http" | ||||
| "code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
| @@ -146,3 +147,22 @@ func ListOrgRepos(ctx *context.APIContext) { | |||||
| listUserRepos(ctx, ctx.Org.Organization, ctx.IsSigned) | listUserRepos(ctx, ctx.Org.Organization, ctx.IsSigned) | ||||
| } | } | ||||
| func GetComputeNodes(ctx *context.APIContext) { | |||||
| taskeType := ctx.QueryInt("type") | |||||
| if taskeType == 2 { | |||||
| ctx.JSON(http.StatusOK, []int{1}) | |||||
| } else { | |||||
| modelarts.InitMultiNode() | |||||
| if modelarts.MultiNodeConfig != nil { | |||||
| for _, info := range modelarts.MultiNodeConfig.Info { | |||||
| if isInOrg, _ := models.IsOrganizationMemberByOrgName(info.Org, ctx.User.ID); isInOrg { | |||||
| ctx.JSON(http.StatusOK, info.Node) | |||||
| return | |||||
| } | |||||
| } | |||||
| } | |||||
| ctx.JSON(http.StatusOK, []int{1}) | |||||
| } | |||||
| } | |||||
| @@ -1239,7 +1239,7 @@ func GrampusTrainJobShow(ctx *context.Context) { | |||||
| return | return | ||||
| } | } | ||||
| task.ContainerIp = "" | task.ContainerIp = "" | ||||
| task.User, _ = models.GetUserByID(task.UserID) | |||||
| if task.DeletedAt.IsZero() { //normal record | if task.DeletedAt.IsZero() { //normal record | ||||
| result, err := grampus.GetJob(task.JobID) | result, err := grampus.GetJob(task.JobID) | ||||
| if err != nil { | if err != nil { | ||||
| @@ -1250,6 +1250,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.GrampusStopJob) | m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.GrampusStopJob) | ||||
| m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.GrampusTrainJobDel) | m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.GrampusTrainJobDel) | ||||
| m.Get("/model_download", cloudbrain.AdminOrJobCreaterRightForTrain, repo.ModelDownload) | m.Get("/model_download", cloudbrain.AdminOrJobCreaterRightForTrain, repo.ModelDownload) | ||||
| m.Get("/download_multi_model", cloudbrain.AdminOrJobCreaterRightForTrain, repo.MultiModelDownload) | |||||
| m.Get("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, repo.GrampusTrainJobVersionNew) | m.Get("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, repo.GrampusTrainJobVersionNew) | ||||
| m.Post("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, bindIgnErr(auth.CreateGrampusTrainJobForm{}), repo.GrampusTrainJobVersionCreate) | m.Post("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, bindIgnErr(auth.CreateGrampusTrainJobForm{}), repo.GrampusTrainJobVersionCreate) | ||||
| }) | }) | ||||
| @@ -1335,6 +1336,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.TrainJobStop) | m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.TrainJobStop) | ||||
| m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.TrainJobDel) | m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.TrainJobDel) | ||||
| m.Get("/model_download", cloudbrain.AdminOrJobCreaterRightForTrain, repo.ModelDownload) | m.Get("/model_download", cloudbrain.AdminOrJobCreaterRightForTrain, repo.ModelDownload) | ||||
| m.Get("/download_multi_model", cloudbrain.AdminOrJobCreaterRightForTrain, repo.MultiModelDownload) | |||||
| m.Get("/download_log_file", cloudbrain.AdminOrJobCreaterRightForTrain, repo.TrainJobDownloadLogFile) | m.Get("/download_log_file", cloudbrain.AdminOrJobCreaterRightForTrain, repo.TrainJobDownloadLogFile) | ||||
| m.Get("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, context.PointAccount(), repo.TrainJobNewVersion) | m.Get("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, context.PointAccount(), repo.TrainJobNewVersion) | ||||
| m.Post("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, bindIgnErr(auth.CreateModelArtsTrainJobForm{}), repo.TrainJobCreateVersion) | m.Post("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, bindIgnErr(auth.CreateModelArtsTrainJobForm{}), repo.TrainJobCreateVersion) | ||||
| @@ -412,9 +412,9 @@ | |||||
| <input type="hidden" name="model{{.VersionName}}" value="-1"> | <input type="hidden" name="model{{.VersionName}}" value="-1"> | ||||
| <input type="hidden" name="modelback{{.VersionName}}" value="-1"> | <input type="hidden" name="modelback{{.VersionName}}" value="-1"> | ||||
| <div class='ui breadcrumb model_file_bread' id='file_breadcrumb{{.VersionName}}'> | <div class='ui breadcrumb model_file_bread' id='file_breadcrumb{{.VersionName}}'> | ||||
| <div class="active section">{{.VersionName}}</div> | |||||
| <div class="divider"> / </div> | |||||
| <div class="active section">{{.VersionName}}</div> | |||||
| <div class="divider"> / </div> | |||||
| </div> | </div> | ||||
| <div id="dir_list{{.VersionName}}" style="max-height: 500px;overflow:auto;"> | <div id="dir_list{{.VersionName}}" style="max-height: 500px;overflow:auto;"> | ||||