You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

cloudbrainNew.js 15 kB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. (function () {
  2. let form = document.getElementById("form_id");
  3. let createFlag = false;
  4. let flag;
  5. form.onsubmit = function (e) {
  6. if (createFlag) return false;
  7. createFlag = true;
  8. };
  9. // $("select.dropdown").dropdown();
  10. $(document).keydown(function (event) {
  11. switch (event.keyCode) {
  12. case 13:
  13. return false;
  14. }
  15. });
  16. $(".menu .item").tab();
  17. $(document).ready(createParamter());
  18. function createParamter() {
  19. let params = $(".dynamic.field").data("params");
  20. params &&
  21. params.parameter.forEach((item, index) => {
  22. Add_parameter(index, (flag = true), item);
  23. });
  24. }
  25. // 参数增加、删除、修改、保存
  26. function Add_parameter(i, flag = false, paramsObject = {}) {
  27. let value = "";
  28. value += `<div class="two fields width85" id= "para${i}">`;
  29. value += '<div class="field">';
  30. let placeholder_value = $(".dynamic.field").data("params-value");
  31. let placeholder_name = $(".dynamic.field").data("params-name");
  32. if (flag) {
  33. value += `<input type="text" class="shipping_first-name" value="${paramsObject.label}">`;
  34. } else {
  35. value +=
  36. '<input type="text" class="shipping_first-name" required placeholder="' +
  37. placeholder_name +
  38. '">';
  39. }
  40. value += "</div>";
  41. value += '<div class="field">';
  42. if (flag) {
  43. value += `<input type="text" class="shipping_last-name" value="${paramsObject.value}">`;
  44. } else {
  45. value +=
  46. '<input type="text" class="shipping_last-name" required placeholder="' +
  47. placeholder_value +
  48. '">';
  49. }
  50. value += "</div>";
  51. value += '<span><i class="trash icon"></i></span>';
  52. value += "</div>";
  53. $(".dynamic.field").append(value);
  54. }
  55. $("#add_run_para").click(function () {
  56. var len = $(".dynamic.field .two.fields").length;
  57. Add_parameter(len);
  58. });
  59. $(".dynamic.field").on("click", ".trash.icon", function () {
  60. var index = $(this).parent().parent().index();
  61. $(this).parent().parent().remove();
  62. var len = $(".dynamic.field .two.fields").length;
  63. $(".dynamic.field .two.fields").each(function () {
  64. var cur_index = $(this).index();
  65. $(this).attr("id", "para" + cur_index);
  66. });
  67. });
  68. var isValidate = false;
  69. function validate() {
  70. $(".ui.form").form({
  71. on: "blur",
  72. fields: {
  73. boot_file: {
  74. identifier: "boot_file",
  75. rules: [
  76. {
  77. type: "regExp[/.+.py$/g]",
  78. },
  79. ],
  80. },
  81. job_name: {
  82. identifier: "job_name",
  83. rules: [
  84. {
  85. type: "regExp[/^[a-z0-9][a-z0-9-_]{1,34}[a-z0-9-]$/]",
  86. },
  87. ],
  88. },
  89. display_job_name: {
  90. identifier: "display_job_name",
  91. rules: [
  92. {
  93. type: "regExp[/^[a-z0-9][a-z0-9-_]{1,34}[a-z0-9-]$/]",
  94. },
  95. ],
  96. },
  97. attachment: {
  98. identifier: "attachment",
  99. rules: [
  100. {
  101. type: "empty",
  102. },
  103. ],
  104. },
  105. spec_id: {
  106. identifier: "spec_id",
  107. rules: [{ type: "empty" }],
  108. },
  109. branch_name: {
  110. identifier: "branch_name",
  111. rules: [{ type: "empty" }],
  112. },
  113. },
  114. onSuccess: function () {
  115. // $('.ui.page.dimmer').dimmer('show')
  116. document.getElementById("mask").style.display = "block";
  117. isValidate = true;
  118. },
  119. onFailure: function (e) {
  120. isValidate = false;
  121. createFlag = false;
  122. return false;
  123. },
  124. });
  125. }
  126. document.onreadystatechange = function () {
  127. if (document.readyState === "complete") {
  128. document.getElementById("mask").style.display = "none";
  129. }
  130. };
  131. function send_run_para() {
  132. var run_parameters = [];
  133. var msg = {};
  134. let paraFlag = true;
  135. $(".dynamic.field .two.fields").each(function () {
  136. var para_name = $(this).find("input.shipping_first-name").val();
  137. var para_value = $(this).find("input.shipping_last-name").val();
  138. if (!para_name) {
  139. $(this).find("input.shipping_first-name").parent().addClass("error");
  140. paraFlag = false;
  141. return;
  142. } else {
  143. $(this).find("input.shipping_first-name").parent().removeClass("error");
  144. }
  145. if (!para_value) {
  146. $(this).find("input.shipping_last-name").parent().addClass("error");
  147. paraFlag = false;
  148. return;
  149. } else {
  150. $(this).find("input.shipping_last-name").parent().removeClass("error");
  151. }
  152. run_parameters.push({ label: para_name, value: para_value });
  153. });
  154. msg["parameter"] = run_parameters;
  155. msg = JSON.stringify(msg);
  156. $("#store_run_para").val(msg);
  157. return paraFlag;
  158. }
  159. function get_name() {
  160. let name1 = $("#engine_name .text").text();
  161. let name2 = $("#flaver_name .text").text();
  162. $("input#ai_engine_name").val(name1);
  163. $("input#ai_flaver_name").val(name2);
  164. if ($(".cloudbrain_image .text").text()) {
  165. $("input[name='image']").val($(".cloudbrain_image .text").text());
  166. }
  167. }
  168. validate();
  169. $(".ui.create_train_job.green.button").click(function (e) {
  170. get_name();
  171. let paramNotValue = send_run_para();
  172. if (!paramNotValue) {
  173. return false;
  174. }
  175. if($('input[name="model_name"]').val() && !$('input[name="ckpt_name"]').val()){
  176. $('input[name="ckpt_name"]').parent().addClass("error")
  177. return false
  178. }
  179. validate();
  180. });
  181. //管理镜像相关的东西
  182. let nameMap, nameList;
  183. let RepoLink = $(".cloudbrain-type").data("repo-link");
  184. let type = $(".cloudbrain-type").data("cloudbrain-type");
  185. let flagModel = $(".cloudbrain-type").data("flag-model");
  186. // 获取模型列表和模型名称对应的模型版本
  187. $(document).ready(function () {
  188. if (!flagModel) return;
  189. else {
  190. $.get(
  191. `${RepoLink}/modelmanage/query_model_for_predict?type=${type}`,
  192. (data) => {
  193. nameMap = data.nameMap;
  194. nameList = data.nameList;
  195. let html = `<div class="item"></div>`;
  196. nameList.forEach((element) => {
  197. html += `<div class="item" data-value=${element}>${element}</div>`;
  198. });
  199. if (nameList.length !== 0) {
  200. $("#model_name").append(html);
  201. }
  202. let faildModelName = $('input[name="model_name"]').val();
  203. let faildModelVersion = $('input[name="model_version"]').val();
  204. let dataID;
  205. // 新建错误的表单返回初始化
  206. if (faildModelName && nameList.includes(faildModelName)) {
  207. $("#select_model").dropdown("set text", faildModelName);
  208. $("#select_model").dropdown("set value", faildModelName);
  209. nameMap[faildModelName].forEach((element) => {
  210. if (element.version === faildModelVersion) {
  211. dataID = element.id;
  212. }
  213. });
  214. initModelVerison(faildModelName, nameMap, faildModelVersion);
  215. initModelckpt(dataID);
  216. }
  217. }
  218. );
  219. }
  220. $("#select_model").dropdown({
  221. onChange: function (value, text, $selectedItem) {
  222. $("#model_name_version").empty();
  223. if (value) {
  224. let html = "";
  225. nameMap[value].forEach((element) => {
  226. //let { trainTaskInfo } = element;
  227. //trainTaskInfo = JSON.parse(trainTaskInfo);
  228. html += `<div class="item" data-label="${element.label}" data-id="${element.id}" data-value="${element.path}">${element.version}</div>`;
  229. });
  230. $("#model_name_version").append(html);
  231. const initVersionText = $(
  232. "#model_name_version div.item:first-child"
  233. ).text();
  234. const initVersionValue = $(
  235. "#model_name_version div.item:first-child"
  236. ).data("value");
  237. $("#select_model_version").dropdown("set text", initVersionText);
  238. $("#select_model_version").dropdown(
  239. "set value",
  240. initVersionValue,
  241. initVersionText,
  242. $("#model_name_version div.item:first-child")
  243. );
  244. } else {
  245. $("#select_model_version").dropdown("set text", "");
  246. $("#select_model_version").dropdown("set value", "");
  247. $("#select_model_checkpoint").dropdown("set text", "");
  248. $("#select_model_checkpoint").dropdown("set value", "");
  249. $("#model_checkpoint").empty();
  250. }
  251. },
  252. });
  253. $("#select_model_version").dropdown({
  254. onChange: function (value, text, $selectedItem) {
  255. if (!value) return;
  256. const dataID =
  257. $selectedItem && $selectedItem[0].getAttribute("data-id");
  258. $("input#ai_model_version").val(text);
  259. $("#select_model_checkpoint").dropdown("set text", "");
  260. $("#select_model_checkpoint").addClass("loading");
  261. $("#model_checkpoint").empty();
  262. let html = "";
  263. loadCheckpointList(dataID).then((res) => {
  264. res.forEach((element) => {
  265. const ckptSuffix = element.FileName.split(".");
  266. const loadCheckpointFile = [
  267. "ckpt",
  268. "pb",
  269. "h5",
  270. "json",
  271. "pkl",
  272. "pth",
  273. "t7",
  274. "pdparams",
  275. "onnx",
  276. "pbtxt",
  277. "keras",
  278. "mlmodel",
  279. "cfg",
  280. "pt",
  281. ];
  282. if (
  283. !element.IsDir &&
  284. loadCheckpointFile.includes(ckptSuffix[ckptSuffix.length - 1])
  285. ) {
  286. html += `<div class="item" data-value="${element.FileName}">${element.FileName}</div>`;
  287. }
  288. });
  289. $("#model_checkpoint").append(html);
  290. $("#select_model_checkpoint").removeClass("loading");
  291. if (html) {
  292. $("#select_model_checkpoint").removeClass("error");
  293. }
  294. const initVersionText = $(
  295. "#model_checkpoint div.item:first-child"
  296. ).text();
  297. const initVersionValue = $(
  298. "#model_checkpoint div.item:first-child"
  299. ).data("value");
  300. $("#select_model_checkpoint").dropdown("set text", initVersionText);
  301. $("#select_model_checkpoint").dropdown(
  302. "set value",
  303. initVersionValue,
  304. initVersionText,
  305. $("#model_name_version div.item:first-child")
  306. );
  307. });
  308. },
  309. });
  310. });
  311. function initModelVerison(value, nameMap, faildModelVersion) {
  312. let faildTrainUrl = $('input[name="pre_train_model_url"]').val();
  313. let html = "";
  314. nameMap[value].forEach((element) => {
  315. html += `<div class="item" data-label="${element.label}" data-id="${element.id}" data-value="${element.path}">${element.version}</div>`;
  316. });
  317. $("#model_name_version").append(html);
  318. $("#select_model_version").dropdown("set text", faildModelVersion);
  319. $("#select_model_version").dropdown("set value", faildTrainUrl);
  320. }
  321. function initModelckpt(dataID) {
  322. let faildCkptName = $('input[name="ckpt_name"]').val();
  323. $("#select_model_checkpoint").addClass("loading");
  324. $("#model_checkpoint").empty();
  325. let html = "";
  326. loadCheckpointList(dataID).then((res) => {
  327. res.forEach((element) => {
  328. const ckptSuffix = element.FileName.split(".");
  329. const loadCheckpointFile = [
  330. "ckpt",
  331. "pb",
  332. "h5",
  333. "json",
  334. "pkl",
  335. "pth",
  336. "t7",
  337. "pdparams",
  338. "onnx",
  339. "pbtxt",
  340. "keras",
  341. "mlmodel",
  342. "cfg",
  343. "pt",
  344. ];
  345. if (
  346. !element.IsDir &&
  347. loadCheckpointFile.includes(ckptSuffix[ckptSuffix.length - 1])
  348. ) {
  349. html += `<div class="item" data-value=${element.FileName}>${element.FileName}</div>`;
  350. }
  351. });
  352. $("#model_checkpoint").append(html);
  353. $("#select_model_checkpoint").removeClass("loading");
  354. $("#select_model_checkpoint").dropdown("set text", faildCkptName);
  355. $("#select_model_checkpoint").dropdown("set value", faildCkptName);
  356. });
  357. }
  358. function loadCheckpointList(value) {
  359. return new Promise((resolve, reject) => {
  360. $.get(
  361. `${RepoLink}/modelmanage/query_modelfile_for_predict`,
  362. { id: value },
  363. (data) => {
  364. resolve(data);
  365. }
  366. );
  367. });
  368. }
  369. // 评测任务相关创建func
  370. let repoLink = $(".cloudbrain-type").data("repo-link");
  371. function setChildType(type_id=1) {
  372. if (type_id == 3) {
  373. $('#train_href_id').attr('href', 'https://openi.pcl.ac.cn/CV_benchmark/CV_MOT_benchmark');
  374. $('#test_href_id').attr('href', 'https://openi.pcl.ac.cn/CV_benchmark/CV_MOT_benchmark');
  375. } else {
  376. $('#train_href_id').attr('href', 'https://openi.pcl.ac.cn/CV_benchmark/CV_reID_benchmark');
  377. $('#test_href_id').attr('href', 'https://openi.pcl.ac.cn/CV_benchmark/CV_reID_benchmark');
  378. }
  379. let child_selected_id = $('#benchmark_child_types_id_hidden').val();
  380. $.get(`${repoLink}/cloudbrain/benchmark/get_child_types?benchmark_type_id=${type_id}`, (data) => {
  381. const n_length = data['child_types'].length
  382. let html = ''
  383. for (let i = 0; i < n_length; i++) {
  384. if (child_selected_id == data['child_types'][i].id) {
  385. html += `<option value="${data['child_types'][i].id}" selected="true">${data['child_types'][i].value}</option>`;
  386. } else {
  387. html += `<option value="${data['child_types'][i].id}">${data['child_types'][i].value}</option>`;
  388. }
  389. }
  390. document.getElementById("benchmark_child_types_id").innerHTML = html;
  391. })
  392. }
  393. $(document).ready(function () {
  394. if ($('input[name=benchmarkMode]').val() === 'alogrithm' || $('input[name=benchmarkMode]').val() === '') {
  395. setChildType();
  396. }
  397. $(".ui.selection.dropdown.benchmark_types_id").dropdown({
  398. onChange:function (value, text, $selectedItem){
  399. setChildType(value)
  400. }
  401. })
  402. $('.ui.search.dropdown.job_type').dropdown({
  403. onChange: function (value, text, $selectedItem) {
  404. if (value === "BRAINSCORE") {
  405. $('#brainscore_child_type').css('display', 'block')
  406. $('#benchmark_model_example').attr('href', 'https://openi.pcl.ac.cn/BDIP/similarity2brain_ann')
  407. }else if(value === "SNN4ECOSET"){
  408. $('#brainscore_child_type').css('display', 'none')
  409. $('#benchmark_model_example').attr('href', 'https://openi.pcl.ac.cn/BDIP/snn4ecoset')
  410. }else {
  411. $('#brainscore_child_type').css('display', 'none')
  412. $('#benchmark_model_example').attr('href', 'https://openi.pcl.ac.cn/BDIP/snn4imagenet')
  413. }
  414. }
  415. })
  416. })
  417. })();