| @@ -141,40 +141,7 @@ | |||||
| onkeydown="this.value=this.value.substring(0, 255)" | onkeydown="this.value=this.value.substring(0, 255)" | ||||
| onkeyup="this.value=this.value.substring(0, 255)">{{.description}}</textarea> | onkeyup="this.value=this.value.substring(0, 255)">{{.description}}</textarea> | ||||
| </div> | </div> | ||||
| <input type="hidden" id="ai_model_version" name="model_version" value="{{$.model_version}}"> | |||||
| <div class="required inline min_title fields" style="width: 93.5%;"> | |||||
| <label class="label-fix-width label-required" style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.infer_job.select_model"}}</label> | |||||
| <div class="six wide field"> | |||||
| <div class="ui fluid selection dropdown" id="select_model"> | |||||
| <input type="hidden" name="model_name" required value="{{.model_name}}"> | |||||
| <div class="text"></div> | |||||
| <i class="dropdown icon"></i> | |||||
| <div class="menu" id="model_name"> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| <input type="hidden" name="pre_train_model_url" value="{{.train_url}}"> | |||||
| <div class="three wide field"> | |||||
| <div class="ui fluid selection dropdown" id="select_model_version"> | |||||
| <input type="hidden" name="train_url" required value="{{.train_url}}"> | |||||
| <div class="text"></div> | |||||
| <i class="dropdown icon"></i> | |||||
| <div class="menu" id="model_name_version"></div> | |||||
| </div> | |||||
| </div> | |||||
| <div class="five wide field"> | |||||
| <div class="ui fluid selection dropdown" id="select_model_checkpoint"> | |||||
| <input type="hidden" name="ckpt_name" required value="{{.ckpt_name}}"> | |||||
| <div class="text"></div> | |||||
| <i class="dropdown icon"></i> | |||||
| <div class="menu" id="model_checkpoint"> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| <span > | |||||
| <i class="question circle icon" data-content="{{.i18n.Tr "cloudbrain.model_file_postfix_rule"}}" data-position="top center" data-variation="inverted mini"></i> | |||||
| </span> | |||||
| </div> | |||||
| {{template "custom/select_model" .}} | |||||
| <div class="required inline min_title field " style="display: none;"> | <div class="required inline min_title field " style="display: none;"> | ||||
| <label class="label-fix-width" style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.resource_pool"}}</label> | <label class="label-fix-width" style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.resource_pool"}}</label> | ||||
| <select class="ui dropdown width48" id="trainjob_resource_pool" name="pool_id"> | <select class="ui dropdown width48" id="trainjob_resource_pool" name="pool_id"> | ||||
| @@ -752,200 +752,4 @@ export default async function initCloudrainSow() { | |||||
| html += "</div>"; | html += "</div>"; | ||||
| $(`#dir_list${version_name}`).append(html); | $(`#dir_list${version_name}`).append(html); | ||||
| } | } | ||||
| let nameMap, nameList; | |||||
| let RepoLink = $(".cloudbrain-type").data("repo-link"); | |||||
| let type = $(".cloudbrain-type").data("cloudbrain-type"); | |||||
| let flagModel = $(".cloudbrain-type").data("flag-model"); | |||||
| // 获取模型列表和模型名称对应的模型版本 | |||||
| $(document).ready(function () { | |||||
| if (!flagModel) return; | |||||
| else { | |||||
| $.get( | |||||
| `${RepoLink}/modelmanage/query_model_for_predict?type=${type}`, | |||||
| (data) => { | |||||
| nameMap = data.nameMap; | |||||
| nameList = data.nameList; | |||||
| let html = `<div class="item"></div>`; | |||||
| nameList.forEach((element) => { | |||||
| html += `<div class="item" data-value=${element}>${element}</div>`; | |||||
| }); | |||||
| if (nameList.length !== 0) { | |||||
| $("#model_name").append(html); | |||||
| } | |||||
| let faildModelName = $('input[name="model_name"]').val(); | |||||
| let faildModelVersion = $('input[name="model_version"]').val(); | |||||
| let dataID; | |||||
| // 新建错误的表单返回初始化 | |||||
| if (faildModelName && nameList.includes(faildModelName)) { | |||||
| $("#select_model").dropdown("set text", faildModelName); | |||||
| $("#select_model").dropdown("set value", faildModelName); | |||||
| nameMap[faildModelName].forEach((element) => { | |||||
| if (element.Version === faildModelVersion) { | |||||
| dataID = element.ID; | |||||
| } | |||||
| }); | |||||
| initModelVerison(faildModelName, nameMap, faildModelVersion); | |||||
| initModelckpt(dataID); | |||||
| } | |||||
| } | |||||
| ); | |||||
| } | |||||
| $("#select_model").dropdown({ | |||||
| onChange: function (value, text, $selectedItem) { | |||||
| $("#model_name_version").empty(); | |||||
| if (value) { | |||||
| let html = ""; | |||||
| nameMap[value].forEach((element) => { | |||||
| //let { trainTaskInfo } = element; | |||||
| //trainTaskInfo = JSON.parse(trainTaskInfo); | |||||
| html += `<div class="item" data-label="${element.label}" data-id="${element.id}" data-value="${element.path}">${element.version}</div>`; | |||||
| }); | |||||
| $("#model_name_version").append(html); | |||||
| const initVersionText = $( | |||||
| "#model_name_version div.item:first-child" | |||||
| ).text(); | |||||
| const initVersionValue = $( | |||||
| "#model_name_version div.item:first-child" | |||||
| ).data("value"); | |||||
| $("#select_model_version").dropdown("set text", initVersionText); | |||||
| $("#select_model_version").dropdown( | |||||
| "set value", | |||||
| initVersionValue, | |||||
| initVersionText, | |||||
| $("#model_name_version div.item:first-child") | |||||
| ); | |||||
| } else { | |||||
| $("#select_model_version").dropdown("set text", ""); | |||||
| $("#select_model_version").dropdown("set value", ""); | |||||
| $("#select_model_checkpoint").dropdown("set text", ""); | |||||
| $("#select_model_checkpoint").dropdown("set value", ""); | |||||
| $("#model_checkpoint").empty(); | |||||
| } | |||||
| }, | |||||
| }); | |||||
| $("#select_model_version").dropdown({ | |||||
| onChange: function (value, text, $selectedItem) { | |||||
| if (!value) return; | |||||
| const dataID = | |||||
| $selectedItem && $selectedItem[0].getAttribute("data-id"); | |||||
| $("input#ai_model_version").val(text); | |||||
| $("#select_model_checkpoint").dropdown("set text", ""); | |||||
| $("#select_model_checkpoint").addClass("loading"); | |||||
| $("#model_checkpoint").empty(); | |||||
| let html = ""; | |||||
| loadCheckpointList(dataID).then((res) => { | |||||
| res.forEach((element) => { | |||||
| const ckptSuffix = element.FileName.split("."); | |||||
| const loadCheckpointFile = [ | |||||
| "ckpt", | |||||
| "pb", | |||||
| "h5", | |||||
| "json", | |||||
| "pkl", | |||||
| "pth", | |||||
| "t7", | |||||
| "pdparams", | |||||
| "onnx", | |||||
| "pbtxt", | |||||
| "keras", | |||||
| "mlmodel", | |||||
| "cfg", | |||||
| "pt", | |||||
| ]; | |||||
| if ( | |||||
| !element.IsDir && | |||||
| loadCheckpointFile.includes(ckptSuffix[ckptSuffix.length - 1]) | |||||
| ) { | |||||
| html += `<div class="item" data-value="${element.FileName}">${element.FileName}</div>`; | |||||
| } | |||||
| }); | |||||
| $("#model_checkpoint").append(html); | |||||
| $("#select_model_checkpoint").removeClass("loading"); | |||||
| if (html) { | |||||
| $("#select_model_checkpoint").removeClass("error"); | |||||
| } | |||||
| const initVersionText = $( | |||||
| "#model_checkpoint div.item:first-child" | |||||
| ).text(); | |||||
| const initVersionValue = $( | |||||
| "#model_checkpoint div.item:first-child" | |||||
| ).data("value"); | |||||
| $("#select_model_checkpoint").dropdown("set text", initVersionText); | |||||
| $("#select_model_checkpoint").dropdown( | |||||
| "set value", | |||||
| initVersionValue, | |||||
| initVersionText, | |||||
| $("#model_name_version div.item:first-child") | |||||
| ); | |||||
| }); | |||||
| }, | |||||
| }); | |||||
| }); | |||||
| function initModelVerison(value, nameMap, faildModelVersion) { | |||||
| let faildTrainUrl = $('input[name="pre_train_model_url"]').val(); | |||||
| let html = ""; | |||||
| nameMap[value].forEach((element) => { | |||||
| let { TrainTaskInfo } = element; | |||||
| TrainTaskInfo = JSON.parse(TrainTaskInfo); | |||||
| html += `<div class="item" data-label="${element.Label}" data-id="${element.ID}" data-value="${element.Path}">${element.Version}</div>`; | |||||
| }); | |||||
| $("#model_name_version").append(html); | |||||
| $("#select_model_version").dropdown("set text", faildModelVersion); | |||||
| $("#select_model_version").dropdown("set value", faildTrainUrl); | |||||
| } | |||||
| function initModelckpt(dataID) { | |||||
| let faildCkptName = $('input[name="ckpt_name"]').val(); | |||||
| $("#select_model_checkpoint").addClass("loading"); | |||||
| $("#model_checkpoint").empty(); | |||||
| let html = ""; | |||||
| loadCheckpointList(dataID).then((res) => { | |||||
| res.forEach((element) => { | |||||
| const ckptSuffix = element.FileName.split("."); | |||||
| const loadCheckpointFile = [ | |||||
| "ckpt", | |||||
| "pb", | |||||
| "h5", | |||||
| "json", | |||||
| "pkl", | |||||
| "pth", | |||||
| "t7", | |||||
| "pdparams", | |||||
| "onnx", | |||||
| "pbtxt", | |||||
| "keras", | |||||
| "mlmodel", | |||||
| "cfg", | |||||
| "pt", | |||||
| ]; | |||||
| if ( | |||||
| !element.IsDir && | |||||
| loadCheckpointFile.includes(ckptSuffix[ckptSuffix.length - 1]) | |||||
| ) { | |||||
| html += `<div class="item" data-value=${element.FileName}>${element.FileName}</div>`; | |||||
| } | |||||
| }); | |||||
| $("#model_checkpoint").append(html); | |||||
| $("#select_model_checkpoint").removeClass("loading"); | |||||
| $("#select_model_checkpoint").dropdown("set text", faildCkptName); | |||||
| $("#select_model_checkpoint").dropdown("set value", faildCkptName); | |||||
| }); | |||||
| } | |||||
| function loadCheckpointList(value) { | |||||
| return new Promise((resolve, reject) => { | |||||
| $.get( | |||||
| `${RepoLink}/modelmanage/query_modelfile_for_predict`, | |||||
| { id: value }, | |||||
| (data) => { | |||||
| resolve(data); | |||||
| } | |||||
| ); | |||||
| }); | |||||
| } | |||||
| } | } | ||||
| @@ -182,4 +182,199 @@ | |||||
| } | } | ||||
| validate(); | validate(); | ||||
| }); | }); | ||||
| //管理镜像相关的东西 | |||||
| let nameMap, nameList; | |||||
| let RepoLink = $(".cloudbrain-type").data("repo-link"); | |||||
| let type = $(".cloudbrain-type").data("cloudbrain-type"); | |||||
| let flagModel = $(".cloudbrain-type").data("flag-model"); | |||||
| // 获取模型列表和模型名称对应的模型版本 | |||||
| $(document).ready(function () { | |||||
| if (!flagModel) return; | |||||
| else { | |||||
| $.get( | |||||
| `${RepoLink}/modelmanage/query_model_for_predict?type=${type}`, | |||||
| (data) => { | |||||
| nameMap = data.nameMap; | |||||
| nameList = data.nameList; | |||||
| let html = `<div class="item"></div>`; | |||||
| nameList.forEach((element) => { | |||||
| html += `<div class="item" data-value=${element}>${element}</div>`; | |||||
| }); | |||||
| if (nameList.length !== 0) { | |||||
| $("#model_name").append(html); | |||||
| } | |||||
| let faildModelName = $('input[name="model_name"]').val(); | |||||
| let faildModelVersion = $('input[name="model_version"]').val(); | |||||
| let dataID; | |||||
| // 新建错误的表单返回初始化 | |||||
| if (faildModelName && nameList.includes(faildModelName)) { | |||||
| $("#select_model").dropdown("set text", faildModelName); | |||||
| $("#select_model").dropdown("set value", faildModelName); | |||||
| nameMap[faildModelName].forEach((element) => { | |||||
| if (element.version === faildModelVersion) { | |||||
| dataID = element.id; | |||||
| } | |||||
| }); | |||||
| initModelVerison(faildModelName, nameMap, faildModelVersion); | |||||
| initModelckpt(dataID); | |||||
| } | |||||
| } | |||||
| ); | |||||
| } | |||||
| $("#select_model").dropdown({ | |||||
| onChange: function (value, text, $selectedItem) { | |||||
| $("#model_name_version").empty(); | |||||
| if (value) { | |||||
| let html = ""; | |||||
| nameMap[value].forEach((element) => { | |||||
| //let { trainTaskInfo } = element; | |||||
| //trainTaskInfo = JSON.parse(trainTaskInfo); | |||||
| html += `<div class="item" data-label="${element.label}" data-id="${element.id}" data-value="${element.path}">${element.version}</div>`; | |||||
| }); | |||||
| $("#model_name_version").append(html); | |||||
| const initVersionText = $( | |||||
| "#model_name_version div.item:first-child" | |||||
| ).text(); | |||||
| const initVersionValue = $( | |||||
| "#model_name_version div.item:first-child" | |||||
| ).data("value"); | |||||
| $("#select_model_version").dropdown("set text", initVersionText); | |||||
| $("#select_model_version").dropdown( | |||||
| "set value", | |||||
| initVersionValue, | |||||
| initVersionText, | |||||
| $("#model_name_version div.item:first-child") | |||||
| ); | |||||
| } else { | |||||
| $("#select_model_version").dropdown("set text", ""); | |||||
| $("#select_model_version").dropdown("set value", ""); | |||||
| $("#select_model_checkpoint").dropdown("set text", ""); | |||||
| $("#select_model_checkpoint").dropdown("set value", ""); | |||||
| $("#model_checkpoint").empty(); | |||||
| } | |||||
| }, | |||||
| }); | |||||
| $("#select_model_version").dropdown({ | |||||
| onChange: function (value, text, $selectedItem) { | |||||
| if (!value) return; | |||||
| const dataID = | |||||
| $selectedItem && $selectedItem[0].getAttribute("data-id"); | |||||
| $("input#ai_model_version").val(text); | |||||
| $("#select_model_checkpoint").dropdown("set text", ""); | |||||
| $("#select_model_checkpoint").addClass("loading"); | |||||
| $("#model_checkpoint").empty(); | |||||
| let html = ""; | |||||
| loadCheckpointList(dataID).then((res) => { | |||||
| res.forEach((element) => { | |||||
| const ckptSuffix = element.FileName.split("."); | |||||
| const loadCheckpointFile = [ | |||||
| "ckpt", | |||||
| "pb", | |||||
| "h5", | |||||
| "json", | |||||
| "pkl", | |||||
| "pth", | |||||
| "t7", | |||||
| "pdparams", | |||||
| "onnx", | |||||
| "pbtxt", | |||||
| "keras", | |||||
| "mlmodel", | |||||
| "cfg", | |||||
| "pt", | |||||
| ]; | |||||
| if ( | |||||
| !element.IsDir && | |||||
| loadCheckpointFile.includes(ckptSuffix[ckptSuffix.length - 1]) | |||||
| ) { | |||||
| html += `<div class="item" data-value="${element.FileName}">${element.FileName}</div>`; | |||||
| } | |||||
| }); | |||||
| $("#model_checkpoint").append(html); | |||||
| $("#select_model_checkpoint").removeClass("loading"); | |||||
| if (html) { | |||||
| $("#select_model_checkpoint").removeClass("error"); | |||||
| } | |||||
| const initVersionText = $( | |||||
| "#model_checkpoint div.item:first-child" | |||||
| ).text(); | |||||
| const initVersionValue = $( | |||||
| "#model_checkpoint div.item:first-child" | |||||
| ).data("value"); | |||||
| $("#select_model_checkpoint").dropdown("set text", initVersionText); | |||||
| $("#select_model_checkpoint").dropdown( | |||||
| "set value", | |||||
| initVersionValue, | |||||
| initVersionText, | |||||
| $("#model_name_version div.item:first-child") | |||||
| ); | |||||
| }); | |||||
| }, | |||||
| }); | |||||
| }); | |||||
| function initModelVerison(value, nameMap, faildModelVersion) { | |||||
| let faildTrainUrl = $('input[name="pre_train_model_url"]').val(); | |||||
| let html = ""; | |||||
| nameMap[value].forEach((element) => { | |||||
| html += `<div class="item" data-label="${element.label}" data-id="${element.id}" data-value="${element.path}">${element.version}</div>`; | |||||
| }); | |||||
| $("#model_name_version").append(html); | |||||
| $("#select_model_version").dropdown("set text", faildModelVersion); | |||||
| $("#select_model_version").dropdown("set value", faildTrainUrl); | |||||
| } | |||||
| function initModelckpt(dataID) { | |||||
| let faildCkptName = $('input[name="ckpt_name"]').val(); | |||||
| $("#select_model_checkpoint").addClass("loading"); | |||||
| $("#model_checkpoint").empty(); | |||||
| let html = ""; | |||||
| loadCheckpointList(dataID).then((res) => { | |||||
| res.forEach((element) => { | |||||
| const ckptSuffix = element.FileName.split("."); | |||||
| const loadCheckpointFile = [ | |||||
| "ckpt", | |||||
| "pb", | |||||
| "h5", | |||||
| "json", | |||||
| "pkl", | |||||
| "pth", | |||||
| "t7", | |||||
| "pdparams", | |||||
| "onnx", | |||||
| "pbtxt", | |||||
| "keras", | |||||
| "mlmodel", | |||||
| "cfg", | |||||
| "pt", | |||||
| ]; | |||||
| if ( | |||||
| !element.IsDir && | |||||
| loadCheckpointFile.includes(ckptSuffix[ckptSuffix.length - 1]) | |||||
| ) { | |||||
| html += `<div class="item" data-value=${element.FileName}>${element.FileName}</div>`; | |||||
| } | |||||
| }); | |||||
| $("#model_checkpoint").append(html); | |||||
| $("#select_model_checkpoint").removeClass("loading"); | |||||
| $("#select_model_checkpoint").dropdown("set text", faildCkptName); | |||||
| $("#select_model_checkpoint").dropdown("set value", faildCkptName); | |||||
| }); | |||||
| } | |||||
| function loadCheckpointList(value) { | |||||
| return new Promise((resolve, reject) => { | |||||
| $.get( | |||||
| `${RepoLink}/modelmanage/query_modelfile_for_predict`, | |||||
| { id: value }, | |||||
| (data) => { | |||||
| resolve(data); | |||||
| } | |||||
| ); | |||||
| }); | |||||
| } | |||||
| })(); | })(); | ||||