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.

cloudbrainShow.js 25 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
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
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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. export default async function initCloudrainSow() {
  2. function debounce(fn, delay) {
  3. let timer;
  4. return (...args) => {
  5. // 判断定时器是否存在,清除定时器
  6. if (timer) {
  7. clearTimeout(timer);
  8. }
  9. // 重新调用setTimeout
  10. timer = setTimeout(() => {
  11. fn.apply(this, args);
  12. }, delay);
  13. };
  14. }
  15. function logScroll(version_name, repoPath, ID) {
  16. let container = document.querySelector(`#log${version_name}`);
  17. let scrollTop = container.scrollTop;
  18. let scrollHeight = container.scrollHeight;
  19. let clientHeight = container.clientHeight;
  20. let scrollLeft = container.scrollLeft;
  21. if (
  22. (parseInt(scrollTop) + clientHeight == scrollHeight ||
  23. parseInt(scrollTop) + clientHeight + 1 == scrollHeight ||
  24. parseInt(scrollTop) + clientHeight - 1 == scrollHeight) &&
  25. scrollLeft === 0
  26. ) {
  27. let end_line = $(`#log${version_name} input[name=end_line]`).val();
  28. $.get(
  29. `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${end_line}&lines=50&order=desc`,
  30. (data) => {
  31. if (data.Lines == 0) {
  32. $(`.message${version_name} #header`).text("您已翻阅至日志底部");
  33. $(`.message${version_name}`).css("display", "block");
  34. setTimeout(function () {
  35. $(`.message${version_name}`).css("display", "none");
  36. }, 1000);
  37. } else {
  38. if (end_line === data.EndLine) {
  39. return;
  40. } else {
  41. $(`#log${version_name} input[name=end_line]`).val(data.EndLine);
  42. $(`#log${version_name}`).append("<pre>" + data.Content);
  43. }
  44. }
  45. }
  46. ).fail(function (err) {
  47. console.log(err);
  48. });
  49. }
  50. if (scrollTop == 0 && scrollLeft == 0) {
  51. let start_line = $(`#log${version_name} input[name=start_line]`).val();
  52. $.get(
  53. `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${start_line}&lines=50&order=asc`,
  54. (data) => {
  55. if (data.Lines == 0) {
  56. $(`.message${version_name} #header`).text("您已翻阅至日志顶部");
  57. $(`.message${version_name}`).css("display", "block");
  58. setTimeout(function () {
  59. $(`.message${version_name}`).css("display", "none");
  60. }, 1000);
  61. } else {
  62. $(`#log${version_name} input[name=start_line]`).val(data.StartLine); //如果变动就改变所对应的值
  63. $(`#log${version_name}`).prepend("<pre>" + data.Content);
  64. }
  65. }
  66. ).fail(function (err) {
  67. console.log(err);
  68. });
  69. }
  70. }
  71. const fn = debounce(logScroll, 500);
  72. $(".log-scroll").scroll(function () {
  73. let version_name = $(this).data("version");
  74. let ID = $(`#accordion${version_name}`).data("jobid");
  75. let repoPath = $(`#accordion${version_name}`).data("repopath");
  76. fn(version_name, repoPath, ID);
  77. });
  78. function scrollAnimation(dom, currentY, targetY, currentX) {
  79. let needScrollTop = targetY - currentY;
  80. let _currentY = currentY;
  81. setTimeout(() => {
  82. // 一次调用滑动帧数,每次调用会不一样
  83. //取总距离的十分之一
  84. const dist = Math.ceil(needScrollTop / 10);
  85. _currentY += dist;
  86. //移动一个十分之一
  87. dom.scrollTo(currentX || 0, _currentY, "smooth");
  88. // 如果移动幅度小于十个像素,直接移动,否则递归调用,实现动画效果
  89. if (needScrollTop > 10 || needScrollTop < -10) {
  90. scrollAnimation(dom, _currentY, targetY);
  91. } else {
  92. dom.scrollTo(0, targetY, "smooth");
  93. }
  94. }, 1);
  95. }
  96. $(".log_top").click(function () {
  97. // let logContentDom = document.querySelector('.log')
  98. // if(!logContentDom)
  99. // return
  100. // let version_name = $('.log_top').data('version')
  101. let version_name = $(this).data("version");
  102. let logContentDom = document.querySelector(`#log${version_name}`);
  103. let ID = $(`#accordion${version_name}`).data("jobid");
  104. let repoPath = $(`#accordion${version_name}`).data("repopath");
  105. $(`#log_file${version_name}`).siblings("pre").remove();
  106. $(`#log${version_name} .ui.inverted.active.dimmer`).css("display", "block");
  107. $.get(
  108. `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=&lines=50&order=asc`,
  109. (data) => {
  110. $(".ui.inverted.active.dimmer").css("display", "none");
  111. $(`#log${version_name} input[name=end_line]`).val(data.EndLine); //如果变动就改变所对应的值
  112. $(`#log${version_name} input[name=start_line]`).val(data.StartLine);
  113. $(`#log${version_name}`).prepend("<pre>" + data.Content);
  114. $(`.message${version_name} #header`).text("您已翻阅至日志顶部");
  115. $(`.message${version_name}`).css("display", "block");
  116. setTimeout(function () {
  117. $(`.message${version_name}`).css("display", "none");
  118. }, 1000);
  119. scrollAnimation(logContentDom, logContentDom.scrollTop, 0);
  120. }
  121. ).fail((err) => {
  122. $(`#log${version_name} .ui.inverted.active.dimmer`).css(
  123. "display",
  124. "none"
  125. );
  126. throw err;
  127. });
  128. });
  129. $(".log_bottom").click(function (e) {
  130. let version_name = $(this).data("version");
  131. let logContentDom = document.querySelector(`#log${version_name}`);
  132. let ID = $(`#accordion${version_name}`).data("jobid");
  133. let repoPath = $(`#accordion${version_name}`).data("repopath");
  134. $(`#log_file${version_name}`).siblings("pre").remove();
  135. let end_line = $(`#log${version_name} input[name=end_line]`).val();
  136. $(`#log${version_name} .ui.inverted.active.dimmer`).css("display", "block");
  137. $.get(
  138. `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=&lines=50&order=desc`,
  139. (data) => {
  140. $(`#log${version_name} .ui.inverted.active.dimmer`).css(
  141. "display",
  142. "none"
  143. );
  144. if (!data.CanLogDownload) {
  145. $(`#${version_name}-log-down`)
  146. .removeClass("ti-download-file")
  147. .addClass("disabled");
  148. }
  149. $(`#log${version_name} input[name=end_line]`).val(data.EndLine); //如果变动就改变所对应的值
  150. $(`#log${version_name} input[name=start_line]`).val(data.StartLine);
  151. $(`#log${version_name}`).append("<pre>" + data.Content);
  152. $.get(
  153. `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=50&order=desc`,
  154. (data) => {
  155. $(".ui.inverted.active.dimmer").css("display", "none");
  156. if (data.Lines == 0) {
  157. $(`.message${version_name} #header`).text("您已翻阅至日志底部");
  158. $(`.message${version_name}`).css("display", "block");
  159. setTimeout(function () {
  160. $(`.message${version_name}`).css("display", "none");
  161. }, 1000);
  162. } else {
  163. if (end_line === data.EndLine || end_line === "") {
  164. return;
  165. } else {
  166. $(`#log${version_name} input[name=end_line]`).val(data.EndLine);
  167. $(`#log${version_name}`).append("<pre>" + data.Content);
  168. }
  169. }
  170. }
  171. ).fail(function (err) {
  172. $(`#log${version_name} .ui.inverted.active.dimmer`).css(
  173. "display",
  174. "none"
  175. );
  176. console.log(err);
  177. });
  178. scrollAnimation(
  179. logContentDom,
  180. logContentDom.scrollTop + 1,
  181. logContentDom.scrollHeight - logContentDom.clientHeight
  182. );
  183. }
  184. ).fail((err) => {
  185. $(`#log${version_name} .ui.inverted.active.dimmer`).css(
  186. "display",
  187. "none"
  188. );
  189. throw err;
  190. });
  191. });
  192. function loadLog(version_name) {
  193. document.getElementById("mask").style.display = "block";
  194. $.get(
  195. `/api/v1/repos/${userName}/${repoPath}/grampus/train-job/${jobID}/log?version_name=${version_name}&lines=50&order=asc`,
  196. (data) => {
  197. $("input[name=end_line]").val(data.EndLine);
  198. $("input[name=start_line]").val(data.StartLine);
  199. $(`#log_file${version_name}`).text(data.Content);
  200. document.getElementById("mask").style.display = "none";
  201. }
  202. ).fail(function (err) {
  203. document.getElementById("mask").style.display = "none";
  204. console.log(err);
  205. });
  206. }
  207. $(".refresh-status").click(function (e) {
  208. let version_name = $(this).data("version");
  209. let ID = $(`#accordion${version_name}`).data("jobid");
  210. let repoPath = $(`#accordion${version_name}`).data("repopath");
  211. refreshStatusShow(version_name, ID, repoPath);
  212. $(`.log-info-${version_name} .log_bottom`).trigger("click");
  213. e.stopPropagation();
  214. });
  215. $(".stop-show-version").click(function (e) {
  216. const ID = this.dataset.jobid;
  217. const repoPath = this.dataset.repopath;
  218. const version_name = this.dataset.version;
  219. const url = `/api/v1/repos/${repoPath}/${ID}/stop_version`;
  220. $.post(url, { version_name: version_name }, (data) => {
  221. if (data.StatusOK === 0) {
  222. $(`#${version_name}-stop`).removeClass("blue");
  223. $(`#${version_name}-stop`).addClass("disabled");
  224. refreshStatusShow(version_name, ID, repoPath);
  225. }
  226. }).fail(function (err) {
  227. console.log(err);
  228. });
  229. e.stopPropagation();
  230. });
  231. $(".delete-show-version").click(function (e) {
  232. const ID = this.dataset.jobid;
  233. const repoPath = this.dataset.repopath;
  234. const version_name = this.dataset.version;
  235. const url = `/api/v1/repos/${repoPath}/${ID}/del_version`;
  236. $(".ui.basic.modal")
  237. .modal({
  238. onApprove: function () {
  239. $.post(url, { version_name: version_name }, (data) => {
  240. console.log(data);
  241. if (data.StatusOK === 0) {
  242. if (data.VersionListCount === 0) {
  243. location.href = `/${repoPath}`;
  244. } else {
  245. $("#accordion" + version_name).remove();
  246. }
  247. refreshStatusShow(version_name, ID, repoPath);
  248. } else {
  249. return;
  250. }
  251. }).fail(function (err) {
  252. console.log(err);
  253. });
  254. },
  255. })
  256. .modal("show");
  257. e.stopPropagation();
  258. });
  259. function refreshStatusShow(version_name, ID, repoPath) {
  260. $.get(
  261. `/api/v1/repos/${repoPath}/${ID}?version_name=${version_name}`,
  262. (data) => {
  263. //accroding下的状态
  264. $(`#${version_name}-status-span span`).text(data.JobStatus);
  265. //accroding下的状态图标
  266. $(`#${version_name}-status-span i`).attr("class", data.JobStatus);
  267. //accroding下的运行时长
  268. $(`#${version_name}-duration-span`).text(data.JobDuration);
  269. //配置信息详情页的状态
  270. $(`#${version_name}-status`).text(data.JobStatus);
  271. //配置信息详情页的状态
  272. $(`#${version_name}-duration`).text(data.JobDuration);
  273. }
  274. ).fail(function (err) {
  275. console.log(err);
  276. });
  277. }
  278. //
  279. $(".content-pad").on("click", ".load-model-file", function () {
  280. let downloadFlag = $(this).data("download-flag") || "";
  281. let gpuFlag = $(this).data("gpu-flag") || "";
  282. let version_name = $(this).data("version");
  283. let parents = $(this).data("parents");
  284. let filename = $(this).data("filename");
  285. let init = $(this).data("init") || "";
  286. let path = $(this).data("path");
  287. let url = `/api/v1/repos${path}?version_name=${version_name}&parentDir=${parents}`;
  288. $.get(url, (data) => {
  289. $(`#dir_list${version_name}`).empty();
  290. if (data.Dirs) {
  291. renderDir(path, data, version_name, downloadFlag, gpuFlag);
  292. }
  293. if (init === "init") {
  294. $(`input[name=model${version_name}]`).val("");
  295. $(`input[name=modelback${version_name}]`).val(version_name);
  296. $(`#file_breadcrumb${version_name}`).empty();
  297. let htmlBread = "";
  298. if (version_name) {
  299. htmlBread += `<div class='active section'>${version_name}</div>`;
  300. } else {
  301. htmlBread += `<div class='active section'>result</div>`;
  302. }
  303. htmlBread += "<div class='divider'> / </div>";
  304. $(`#file_breadcrumb${version_name}`).append(htmlBread);
  305. } else {
  306. renderBrend(
  307. path,
  308. version_name,
  309. parents,
  310. filename,
  311. init,
  312. downloadFlag,
  313. gpuFlag
  314. );
  315. }
  316. }).fail(function (err) {
  317. console.log(err, version_name);
  318. });
  319. });
  320. function renderSize(value) {
  321. if (null == value || value == "") {
  322. return "0 Bytes";
  323. }
  324. var unitArr = new Array(
  325. "Bytes",
  326. "KB",
  327. "MB",
  328. "GB",
  329. "TB",
  330. "PB",
  331. "EB",
  332. "ZB",
  333. "YB"
  334. );
  335. var index = 0;
  336. var srcsize = parseFloat(value);
  337. index = Math.floor(Math.log(srcsize) / Math.log(1024));
  338. var size = srcsize / Math.pow(1024, index);
  339. size = size.toFixed(0); //保留的小数位数
  340. return size + unitArr[index];
  341. }
  342. function renderBrend(
  343. path,
  344. version_name,
  345. parents,
  346. filename,
  347. init,
  348. downloadFlag,
  349. gpuFlag
  350. ) {
  351. if (init == "folder") {
  352. let htmlBrend = "";
  353. let sectionName = $(
  354. `#file_breadcrumb${version_name} .active.section`
  355. ).text();
  356. let parents1 = $(`input[name=model${version_name}]`).val();
  357. let filename1 = $(`input[name=modelback${version_name}]`).val();
  358. if (parents1 === "") {
  359. $(`#file_breadcrumb${version_name} .active.section`).replaceWith(
  360. `<a class='section load-model-file' data-download-flag='${downloadFlag}' data-gpu-flag='${gpuFlag}' data-path='${path}' data-version='${version_name}' data-parents='${parents1}' data-filename='' data-init='init'>${sectionName}</a>`
  361. );
  362. } else {
  363. $(`#file_breadcrumb${version_name} .active.section`).replaceWith(
  364. `<a class='section load-model-file' data-download-flag='${downloadFlag}' data-gpu-flag='${gpuFlag}' data-path='${path}' data-version='${version_name}' data-parents='${parents1}' data-filename='${filename1}'>${sectionName}</a>`
  365. );
  366. }
  367. htmlBrend += `<div class='active section'>${filename}</div>`;
  368. htmlBrend += "<div class='divider'> / </div>";
  369. $(`#file_breadcrumb${version_name}`).append(htmlBrend);
  370. $(`input[name=model${version_name}]`).val(parents);
  371. $(`input[name=modelback${version_name}]`).val(filename);
  372. } else {
  373. $(`input[name=model${version_name}]`).val(parents);
  374. $(`input[name=modelback${version_name}]`).val(filename);
  375. let selectEle = $(`#file_breadcrumb${version_name} a.section`).filter(
  376. (index, item) => {
  377. return item.text == filename;
  378. }
  379. );
  380. selectEle.nextAll().remove();
  381. selectEle.after("<div class='divider'> / </div>");
  382. selectEle.replaceWith(`<div class='active section'>${filename}</div>`);
  383. }
  384. }
  385. function renderDir(path, data, version_name, downloadFlag, gpuFlag) {
  386. let html = "";
  387. html += "<div class='ui grid' style='margin:0;'>";
  388. html += "<div class='row' style='padding: 0;'>";
  389. html += "<div class='ui sixteen wide column' style='padding:1rem;'>";
  390. html += "<div class='dir list'>";
  391. html += "<table id='repo-files-table' class='ui single line table pad20'>";
  392. html += "<tbody>";
  393. // html += "</tbody>"
  394. for (let i = 0; i < data.Dirs.length; i++) {
  395. let dirs_size = renderSize(data.Dirs[i].Size);
  396. html += "<tr>";
  397. html += "<td class='name six wid'>";
  398. html += "<span class='truncate'>";
  399. html += "<span class='octicon octicon-file-directory'>";
  400. html += "</span>";
  401. if (data.Dirs[i].IsDir) {
  402. html += `<a class='load-model-file' data-download-flag='${downloadFlag}' data-gpu-flag='${gpuFlag}' data-path='${path}' data-version='${version_name}' data-parents='${data.Dirs[i].ParenDir}' data-filename='${data.Dirs[i].FileName}' data-init='folder'>`;
  403. html +=
  404. "<span class='fitted'><i class='folder icon' width='16' height='16' aria-hidden='true'></i>" +
  405. data.Dirs[i].FileName +
  406. "</span>";
  407. } else {
  408. if (downloadFlag) {
  409. if (gpuFlag) {
  410. if (path.includes("model_list")) {
  411. html += `<a href="${location.href}/download_model?version_name=${version_name}&fileName=${data.Dirs[i].FileName}&parentDir=${data.Dirs[i].ParenDir}&jobName=${data.task.JobName}">`;
  412. } else {
  413. html += `<a href="${location.href}/result_download?version_name=${version_name}&fileName=${data.Dirs[i].FileName}&parentDir=${data.Dirs[i].ParenDir}&jobName=${data.task.JobName}">`;
  414. }
  415. } else {
  416. if (path.includes("model_list")) {
  417. html += `<a href="${location.href}/model_download?version_name=${version_name}&file_name=${data.Dirs[i].FileName}&parent_dir=${data.Dirs[i].ParenDir}">`;
  418. } else {
  419. html += `<a href="${location.href}/result_download?version_name=${version_name}&file_name=${data.Dirs[i].FileName}&parent_dir=${data.Dirs[i].ParenDir}">`;
  420. }
  421. }
  422. } else {
  423. html += `<a class="disabled">`;
  424. }
  425. html +=
  426. "<span class='fitted'><i class='file icon' width='16' height='16' aria-hidden='true'></i>" +
  427. data.Dirs[i].FileName +
  428. "</span>";
  429. }
  430. html += "</a>";
  431. html += "</span>";
  432. html += "</td>";
  433. html += "<td class='message1 seven wide'>";
  434. if (data.Dirs[i].IsDir) {
  435. html += "<span class='truncate has-emoji'></span>";
  436. } else {
  437. html +=
  438. "<span class='truncate has-emoji'>" + `${dirs_size}` + "</span>";
  439. }
  440. html += "</td>";
  441. html += "<td class='text right age three wide'>";
  442. html +=
  443. "<span class='truncate has-emoji'>" + data.Dirs[i].ModTime + "</span>";
  444. html += "</td>";
  445. html += "</tr>";
  446. }
  447. html += "</tbody>";
  448. html += "</table>";
  449. html += "</div>";
  450. html += "</div>";
  451. html += "</div>";
  452. html += "</div>";
  453. $(`#dir_list${version_name}`).append(html);
  454. }
  455. let nameMap, nameList;
  456. let RepoLink = $(".cloudbrain-type").data("repo-link");
  457. let type = $(".cloudbrain-type").data("cloudbrain-type");
  458. let flagModel = $(".cloudbrain-type").data("flag-model");
  459. // 获取模型列表和模型名称对应的模型版本
  460. $(document).ready(function () {
  461. if (!flagModel) return;
  462. else {
  463. $.get(
  464. `${RepoLink}/modelmanage/query_model_for_predict?type=${type}`,
  465. (data) => {
  466. nameMap = data.nameMap;
  467. nameList = data.nameList;
  468. let html = `<div class="item"></div>`;
  469. nameList.forEach((element) => {
  470. html += `<div class="item" data-value=${element}>${element}</div>`;
  471. });
  472. if (nameList.length !== 0) {
  473. $("#model_name").append(html);
  474. }
  475. let faildModelName = $('input[name="model_name"]').val();
  476. let faildModelVersion = $('input[name="model_version"]').val();
  477. let dataID;
  478. // 新建错误的表单返回初始化
  479. if (faildModelName && nameList.includes(faildModelName)) {
  480. $("#select_model").dropdown("set text", faildModelName);
  481. $("#select_model").dropdown("set value", faildModelName);
  482. nameMap[faildModelName].forEach((element) => {
  483. if (element.Version === faildModelVersion) {
  484. dataID = element.ID;
  485. }
  486. });
  487. initModelVerison(faildModelName, nameMap, faildModelVersion);
  488. initModelckpt(dataID);
  489. }
  490. }
  491. );
  492. }
  493. $("#select_model").dropdown({
  494. onChange: function (value, text, $selectedItem) {
  495. $("#model_name_version").empty();
  496. if (value) {
  497. let html = "";
  498. nameMap[value].forEach((element) => {
  499. let { TrainTaskInfo } = element;
  500. TrainTaskInfo = JSON.parse(TrainTaskInfo);
  501. html += `<div class="item" data-label="${element.Label}" data-id="${element.ID}" data-value="${element.Path}">${element.Version}</div>`;
  502. });
  503. $("#model_name_version").append(html);
  504. const initVersionText = $(
  505. "#model_name_version div.item:first-child"
  506. ).text();
  507. const initVersionValue = $(
  508. "#model_name_version div.item:first-child"
  509. ).data("value");
  510. $("#select_model_version").dropdown("set text", initVersionText);
  511. $("#select_model_version").dropdown(
  512. "set value",
  513. initVersionValue,
  514. initVersionText,
  515. $("#model_name_version div.item:first-child")
  516. );
  517. } else {
  518. $("#select_model_version").dropdown("set text", "");
  519. $("#select_model_version").dropdown("set value", "");
  520. $("#select_model_checkpoint").dropdown("set text", "");
  521. $("#select_model_checkpoint").dropdown("set value", "");
  522. }
  523. },
  524. });
  525. $("#select_model_version").dropdown({
  526. onChange: function (value, text, $selectedItem) {
  527. if (!value) return;
  528. const dataID =
  529. $selectedItem && $selectedItem[0].getAttribute("data-id");
  530. $("input#ai_model_version").val(text);
  531. $("#select_model_checkpoint").dropdown("set text", "");
  532. $("#select_model_checkpoint").addClass("loading");
  533. $("#model_checkpoint").empty();
  534. let html = "";
  535. loadCheckpointList(dataID).then((res) => {
  536. res.forEach((element) => {
  537. const ckptSuffix = element.FileName.split(".");
  538. const loadCheckpointFile = [
  539. "ckpt",
  540. "pb",
  541. "h5",
  542. "json",
  543. "pkl",
  544. "pth",
  545. "t7",
  546. "pdparams",
  547. "onnx",
  548. "pbtxt",
  549. "keras",
  550. "mlmodel",
  551. "cfg",
  552. "pt",
  553. ];
  554. if (
  555. !element.IsDir &&
  556. loadCheckpointFile.includes(ckptSuffix[ckptSuffix.length - 1])
  557. ) {
  558. html += `<div class="item" data-value=${element.FileName}>${element.FileName}</div>`;
  559. }
  560. });
  561. $("#model_checkpoint").append(html);
  562. $("#select_model_checkpoint").removeClass("loading");
  563. const initVersionText = $(
  564. "#model_checkpoint div.item:first-child"
  565. ).text();
  566. const initVersionValue = $(
  567. "#model_checkpoint div.item:first-child"
  568. ).data("value");
  569. $("#select_model_checkpoint").dropdown("set text", initVersionText);
  570. $("#select_model_checkpoint").dropdown(
  571. "set value",
  572. initVersionValue,
  573. initVersionText,
  574. $("#model_name_version div.item:first-child")
  575. );
  576. });
  577. },
  578. });
  579. });
  580. function initModelVerison(value, nameMap, faildModelVersion) {
  581. let faildTrainUrl = $('input[name="pre_train_model_url"]').val();
  582. let html = "";
  583. nameMap[value].forEach((element) => {
  584. let { TrainTaskInfo } = element;
  585. TrainTaskInfo = JSON.parse(TrainTaskInfo);
  586. html += `<div class="item" data-label="${element.Label}" data-id="${element.ID}" data-value="${element.Path}">${element.Version}</div>`;
  587. });
  588. $("#model_name_version").append(html);
  589. $("#select_model_version").dropdown("set text", faildModelVersion);
  590. $("#select_model_version").dropdown("set value", faildTrainUrl);
  591. }
  592. function initModelckpt(dataID) {
  593. let faildCkptName = $('input[name="ckpt_name"]').val();
  594. $("#select_model_checkpoint").addClass("loading");
  595. $("#model_checkpoint").empty();
  596. let html = "";
  597. loadCheckpointList(dataID).then((res) => {
  598. res.forEach((element) => {
  599. const ckptSuffix = element.FileName.split(".");
  600. const loadCheckpointFile = [
  601. "ckpt",
  602. "pb",
  603. "h5",
  604. "json",
  605. "pkl",
  606. "pth",
  607. "t7",
  608. "pdparams",
  609. "onnx",
  610. "pbtxt",
  611. "keras",
  612. "mlmodel",
  613. "cfg",
  614. "pt",
  615. ];
  616. if (
  617. !element.IsDir &&
  618. loadCheckpointFile.includes(ckptSuffix[ckptSuffix.length - 1])
  619. ) {
  620. html += `<div class="item" data-value=${element.FileName}>${element.FileName}</div>`;
  621. }
  622. });
  623. $("#model_checkpoint").append(html);
  624. $("#select_model_checkpoint").removeClass("loading");
  625. $("#select_model_checkpoint").dropdown("set text", faildCkptName);
  626. $("#select_model_checkpoint").dropdown("set value", faildCkptName);
  627. });
  628. }
  629. function loadCheckpointList(value) {
  630. return new Promise((resolve, reject) => {
  631. $.get(
  632. `${RepoLink}/modelmanage/query_modelfile_for_predict`,
  633. { ID: value },
  634. (data) => {
  635. resolve(data);
  636. }
  637. );
  638. });
  639. }
  640. }