@@ -54,6 +54,7 @@ type AiModelManageConvert struct { | |||
InputShape string `xorm:"varchar(2000)"` | |||
InputDataFormat string `xorm:"NOT NULL"` | |||
Description string `xorm:"varchar(2000)"` | |||
Path string `xorm:"varchar(400) NOT NULL"` | |||
CreatedUnix timeutil.TimeStamp `xorm:"created"` | |||
UpdatedUnix timeutil.TimeStamp `xorm:"updated"` | |||
UserName string | |||
@@ -25,6 +25,7 @@ const ( | |||
tplModelManageConvertIndex = "repo/modelmanage/convertIndex" | |||
tplModelManageDownload = "repo/modelmanage/download" | |||
tplModelInfo = "repo/modelmanage/showinfo" | |||
tplModelConvertInfo = "repo/modelmanage/convertshowinfo" | |||
MODEL_LATEST = 1 | |||
MODEL_NOT_LATEST = 0 | |||
) | |||
@@ -146,6 +147,39 @@ func SaveNewNameModel(ctx *context.Context) { | |||
log.Info("save model end.") | |||
} | |||
func SaveModelConvert(ctx *context.Context) { | |||
log.Info("save model start.") | |||
if !ctx.Repo.CanWrite(models.UnitTypeModelManage) { | |||
ctx.JSON(403, ctx.Tr("repo.model_noright")) | |||
return | |||
} | |||
name := ctx.Query("name") | |||
desc := ctx.Query("desc") | |||
modelId := ctx.Query("modelId") | |||
SrcEngine := ctx.QueryInt("SrcEngine") | |||
InputShape := ctx.Query("inputshape") | |||
InputDataFormat := ctx.Query("inputdataformat") | |||
DestFormat := ctx.QueryInt("DestFormat") | |||
NetOutputFormat := ctx.QueryInt("NetOutputFormat") | |||
uuid := uuid.NewV4() | |||
id := uuid.String() | |||
modelConvert := &models.AiModelManageConvert{ | |||
ID: id, | |||
Name: name, | |||
Description: desc, | |||
SrcEngine: SrcEngine, | |||
RepoId: ctx.Repo.Repository.ID, | |||
ModelId: modelId, | |||
DestFormat: DestFormat, | |||
NetOutputFormat: NetOutputFormat, | |||
InputShape: InputShape, | |||
InputDataFormat: InputDataFormat, | |||
UserId: ctx.User.ID, | |||
} | |||
models.SaveModelConvert(modelConvert) | |||
} | |||
func SaveModel(ctx *context.Context) { | |||
log.Info("save model start.") | |||
JobId := ctx.Query("JobId") | |||
@@ -226,6 +260,19 @@ func downloadModelFromCloudBrainOne(modelUUID string, jobName string, parentDir | |||
} | |||
} | |||
func DeleteModelConvert(ctx *context.Context) { | |||
log.Info("delete model convert start.") | |||
id := ctx.Query("ID") | |||
err := models.DeleteModelConvertById(id) | |||
if err != nil { | |||
ctx.JSON(500, err.Error()) | |||
} else { | |||
ctx.JSON(200, map[string]string{ | |||
"result_code": "0", | |||
}) | |||
} | |||
} | |||
func DeleteModel(ctx *context.Context) { | |||
log.Info("delete model start.") | |||
id := ctx.Query("ID") | |||
@@ -520,6 +567,15 @@ func ShowModelInfo(ctx *context.Context) { | |||
ctx.HTML(200, tplModelInfo) | |||
} | |||
func ShowModelConvertInfo(ctx *context.Context) { | |||
ctx.Data["ID"] = ctx.Query("ID") | |||
ctx.Data["name"] = ctx.Query("name") | |||
ctx.Data["isModelManage"] = true | |||
ctx.Data["ModelManageAccess"] = ctx.Repo.CanWrite(models.UnitTypeModelManage) | |||
ctx.HTML(200, tplModelConvertInfo) | |||
} | |||
func ShowSingleModel(ctx *context.Context) { | |||
name := ctx.Query("name") | |||
@@ -623,6 +679,7 @@ func ConvertModelTemplate(ctx *context.Context) { | |||
ctx.Data["MODEL_COUNT"] = 0 | |||
ctx.Data["ModelManageAccess"] = ctx.Repo.CanWrite(models.UnitTypeModelManage) | |||
ctx.Data["TRAIN_COUNT"] = 0 | |||
ctx.HTML(200, tplModelManageConvertIndex) | |||
} | |||
@@ -660,6 +717,50 @@ func isOper(ctx *context.Context, modelUserId int64) bool { | |||
return false | |||
} | |||
func ShowModelConvertPageInfo(ctx *context.Context) { | |||
log.Info("ShowModelConvertInfo start.") | |||
if !isQueryRight(ctx) { | |||
ctx.NotFound(ctx.Req.URL.RequestURI(), nil) | |||
return | |||
} | |||
page := ctx.QueryInt("page") | |||
if page <= 0 { | |||
page = 1 | |||
} | |||
pageSize := ctx.QueryInt("pageSize") | |||
if pageSize <= 0 { | |||
pageSize = setting.UI.IssuePagingNum | |||
} | |||
repoId := ctx.Repo.Repository.ID | |||
modelResult, count, err := models.QueryModelConvert(&models.AiModelQueryOptions{ | |||
ListOptions: models.ListOptions{ | |||
Page: page, | |||
PageSize: pageSize, | |||
}, | |||
RepoID: repoId, | |||
}) | |||
if err != nil { | |||
ctx.ServerError("Cloudbrain", err) | |||
return | |||
} | |||
userIds := make([]int64, len(modelResult)) | |||
for i, model := range modelResult { | |||
model.IsCanOper = isOper(ctx, model.UserId) | |||
model.IsCanDelete = isCanDelete(ctx, model.UserId) | |||
userIds[i] = model.UserId | |||
} | |||
userNameMap := queryUserName(userIds) | |||
for _, model := range modelResult { | |||
value := userNameMap[model.UserId] | |||
if value != nil { | |||
model.UserName = value.Name | |||
model.UserRelAvatarLink = value.RelAvatarLink() | |||
} | |||
} | |||
ctx.Data["Tasks"] = modelResult | |||
} | |||
func ShowModelPageInfo(ctx *context.Context) { | |||
log.Info("ShowModelInfo start.") | |||
if !isQueryRight(ctx) { | |||
@@ -1077,12 +1077,15 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
}, context.RepoRef()) | |||
m.Group("/modelmanage", func() { | |||
m.Post("/create_model", reqRepoModelManageWriter, repo.SaveModel) | |||
m.Post("/create_model_convert", reqRepoModelManageWriter, repo.SaveModelConvert) | |||
m.Post("/create_new_model", repo.SaveNewNameModel) | |||
m.Delete("/delete_model", repo.DeleteModel) | |||
m.Delete("/delete_model_convert", repo.DeleteModelConvert) | |||
m.Put("/modify_model", repo.ModifyModelInfo) | |||
m.Get("/show_model", reqRepoModelManageReader, repo.ShowModelTemplate) | |||
m.Get("/convert_model", reqRepoModelManageReader, repo.ConvertModelTemplate) | |||
m.Get("/show_model_info", repo.ShowModelInfo) | |||
m.Get("/show_model_convert_info", repo.ShowModelConvertInfo) | |||
m.Get("/show_model_info_api", repo.ShowSingleModel) | |||
m.Get("/show_model_api", repo.ShowModelPageInfo) | |||
m.Get("/show_model_child_api", repo.ShowOneVersionOtherModel) | |||
@@ -67,7 +67,7 @@ | |||
<div class="dataset list"> | |||
<!-- 表头 --> | |||
<div class="ui grid stackable" style="background: #f0f0f0;;"> | |||
<div class="ui grid stackable" style="background: #f0f0f0;"> | |||
<div class="row"> | |||
<div class="three wide column padding0"> | |||
<span style="margin:0 6px">{{$.i18n.Tr "repo.cloudbrain_task"}}</span> | |||
@@ -67,6 +67,32 @@ | |||
</div> | |||
</div> | |||
</div> | |||
{{range .Tasks}} | |||
<div class="ui grid stackable item"> | |||
<div class="row"> | |||
<div class="three wide column padding0"> | |||
<a class="title" href="{{$.Link}}/modelmanage/show_model_convert_info?id={{.ID}}" title="{{.Name}}" style="font-size: 14px;"> | |||
<span class="fitted" style="width: 90%;vertical-align: middle;">{{.Name}}</span> | |||
</a> | |||
</div> | |||
</div> | |||
</div> | |||
{{end}} | |||
<div id="app" style="margin-top: 2rem;"> | |||
<div class="center"> | |||
<el-pagination | |||
background | |||
@current-change="handleCurrentChange" | |||
:current-page="page" | |||
:page-sizes="[10]" | |||
:page-size="10" | |||
layout="total, sizes, prev, pager, next, jumper" | |||
:total="{{.Page.Paginater.Total}}"> | |||
</el-pagination> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
@@ -198,16 +224,22 @@ | |||
var modelData; | |||
$('#submitId').click(function(){ | |||
let name = $('#model_convert_name').val() | |||
let desc = $('#Description').val() | |||
let modelId = $('#ModelVersion').val() | |||
let SrcEngine = $('#SrcEngine').val(); | |||
let inputshape = $('#inputshape').val(); | |||
let inputdataformat = $('#inputdataformat').val(); | |||
let DestFormat = $('#DestFormat').val(); | |||
let NetOutputFormat = $('#NetOutputFormat').val(); | |||
console.log("name=" + name + " desc=" + desc + " modelId=" + modelId + " SrcEngine=" + SrcEngine); | |||
console.log("inputshape=" + inputshape + " inputdataformat=" + inputdataformat + " DestFormat=" + DestFormat + " NetOutputFormat=" + NetOutputFormat); | |||
let data={}; | |||
data['name']= $('#model_convert_name').val() | |||
data['desc']= $('#Description').val() | |||
data['modelId'] = $('#ModelVersion').val() | |||
data['SrcEngine'] = $('#SrcEngine').val(); | |||
data['inputshape']= $('#inputshape').val(); | |||
data['inputdataformat']= $('#inputdataformat').val(); | |||
data['DestFormat'] = $('#DestFormat').val(); | |||
data['NetOutputFormat']= $('#NetOutputFormat').val(); | |||
console.log("name=" + data['name'] + " desc=" + data['desc'] + " modelId=" + data['modelId'] + " SrcEngine=" + data['SrcEngine']); | |||
console.log("inputshape=" + data['inputshape'] + " inputdataformat=" + data['inputdataformat'] + " DestFormat=" + data['DestFormat'] + " NetOutputFormat=" + data['NetOutputFormat']); | |||
$('.ui.modal.second').modal('hide'); | |||
$.post(`${repolink}/modelmanage/create_model_convert?repoId=${repoId}`,data,(result) => { | |||
console.log("result=" + result); | |||
}) | |||
}) | |||
function createModelName(){ | |||