@@ -16,6 +16,7 @@ import ( | |||
"fmt" | |||
_ "image/jpeg" // Needed for jpeg support | |||
"image/png" | |||
"math/rand" | |||
"os" | |||
"path/filepath" | |||
"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 | |||
// service. | |||
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. | |||
@@ -28,9 +28,9 @@ func ToCloudBrain(task *models.Cloudbrain) *api.Cloudbrain { | |||
BootFile: task.BootFile, | |||
Description: task.Description, | |||
ModelName: task.ModelName, | |||
ModelVersion: task.ModelVersion, | |||
CkptName: task.CkptName, | |||
VersionName: task.VersionName, | |||
ModelVersion: task.ModelVersion, | |||
CkptName: task.CkptName, | |||
StartTime: int64(task.StartTime), | |||
EndTime: int64(task.EndTime), | |||
@@ -51,33 +51,33 @@ type CreateFileNotebookJobOption 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 { | |||
@@ -549,6 +549,8 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
}, reqToken()) | |||
m.Get("/compute-nodes", reqToken(), user.GetComputeNodes) | |||
// Notifications | |||
m.Group("/notifications", func() { | |||
m.Combo(""). | |||
@@ -5,6 +5,7 @@ | |||
package user | |||
import ( | |||
"code.gitea.io/gitea/modules/modelarts" | |||
"net/http" | |||
"code.gitea.io/gitea/models" | |||
@@ -146,3 +147,22 @@ func ListOrgRepos(ctx *context.APIContext) { | |||
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 | |||
} | |||
task.ContainerIp = "" | |||
task.User, _ = models.GetUserByID(task.UserID) | |||
if task.DeletedAt.IsZero() { //normal record | |||
result, err := grampus.GetJob(task.JobID) | |||
if err != nil { | |||
@@ -1250,6 +1250,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.GrampusStopJob) | |||
m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.GrampusTrainJobDel) | |||
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.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("/del", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.TrainJobDel) | |||
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("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, context.PointAccount(), repo.TrainJobNewVersion) | |||
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="modelback{{.VersionName}}" value="-1"> | |||
<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 id="dir_list{{.VersionName}}" style="max-height: 500px;overflow:auto;"> | |||