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.

convertIndex.tmpl 29 kB

2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. <!-- 头部导航栏 -->
  2. {{template "base/head" .}}
  3. <!-- 弹窗 -->
  4. <style>
  5. .inline.fields .right.aligned label{
  6. width: 100% !important;
  7. text-align: right;
  8. }
  9. .inline .ui.dropdown .text {
  10. color: rgba(0, 0, 0, .87) !important;
  11. left: 15px !important;
  12. }
  13. .text_color {
  14. color: rgb(0 0 0 / 87%);
  15. }
  16. </style>
  17. <div id="mask">
  18. <div id="loadingPage">
  19. <div class="rect1"></div>
  20. <div class="rect2"></div>
  21. <div class="rect3"></div>
  22. <div class="rect4"></div>
  23. <div class="rect5"></div>
  24. </div>
  25. </div>
  26. {{$repository := .Repository.ID}}
  27. <!-- 提示框 -->
  28. <div class="alert"></div>
  29. <div class="repository release dataset-list view">
  30. {{template "repo/header" .}}
  31. <!-- 列表容器 -->
  32. <div class="ui container" id="loadContainer">
  33. {{template "base/alert" .}}
  34. <div class="ui two column stackable grid">
  35. <div class="column">
  36. <div class="ui blue small menu compact selectcloudbrain">
  37. <a class="item" href="{{.RepoLink}}/modelmanage/show_model">{{$.i18n.Tr "repo.model.list"}}</a>
  38. <a class="active item" href="{{.RepoLink}}/modelmanage/convert_model">{{$.i18n.Tr "repo.model.convert"}}</a>
  39. </div>
  40. </div>
  41. <div class="column right aligned">
  42. <!-- -->
  43. <a class="ui button {{if .Permission.CanWrite $.UnitTypeModelManage}} green {{else}} disabled {{end}}" onclick="showcreate(this)">{{$.i18n.Tr "repo.model.manage.create_new_convert_task"}}</a>
  44. </div>
  45. </div>
  46. {{if eq .MODEL_CONVERT_COUNT 0}}
  47. <div class="ui placeholder segment bgtask-none">
  48. <div class="ui icon header bgtask-header-pic"></div>
  49. <div class="bgtask-content-header">{{$.i18n.Tr "repo.modelconvert.notcreate"}}</div>
  50. <div class="bgtask-content">
  51. {{if eq .MODEL_COUNT 0}}
  52. <div class="bgtask-content-txt">{{$.i18n.Tr "repo.modelconvert.importfirst1"}}<a href="{{.RepoLink}}/modelmanage/show_model">{{$.i18n.Tr "repo.modelconvert.importfirst2"}}</a>{{$.i18n.Tr "repo.modelconvert.importfirst3"}}</div>
  53. {{end}}
  54. <div class="bgtask-content-txt">{{$.i18n.Tr "repo.platform_instructions"}}</div>
  55. </div>
  56. </div>
  57. {{else}}
  58. <!-- 中下列表展示区 -->
  59. <div class="ui grid">
  60. <div class="row" style="padding-top: 0;">
  61. <div class="ui sixteen wide column">
  62. <!-- 任务展示 -->
  63. <div class="dataset list" id="model_convert_list">
  64. <!-- 表头 -->
  65. <div class="ui grid stackable" style="background: #f0f0f0;;">
  66. <div class="row">
  67. <div class="three wide column padding0">
  68. <span style="margin:0 6px">{{$.i18n.Tr "repo.modelconvert.taskname"}}</span>
  69. </div>
  70. <div class="two wide column text center padding0">
  71. <span>{{$.i18n.Tr "repo.modelconvert.taskstatus"}}</span>
  72. </div>
  73. <div class="two wide column text center padding0">
  74. <span>{{$.i18n.Tr "repo.modelconvert.srcengine"}}</span>
  75. </div>
  76. <div class="two wide column text center padding0">
  77. <span>{{$.i18n.Tr "repo.modelconvert.outputformat"}}</span>
  78. </div>
  79. <div class="two wide column text center padding0">
  80. <span>{{$.i18n.Tr "repo.modelconvert.createtime"}}</span>
  81. </div>
  82. <div class="one wide column text center padding0">
  83. <span>{{$.i18n.Tr "repo.cloudbrain_creator"}}</span>
  84. </div>
  85. <div class="three wide column text center padding0">
  86. <span>{{$.i18n.Tr "repo.cloudbrain_operate"}}</span>
  87. </div>
  88. </div>
  89. </div>
  90. {{range .Tasks}}
  91. <div class="ui grid stackable item">
  92. <div class="row">
  93. <div class="three wide column padding0">
  94. <a class="title" href="{{$.RepoLink}}/modelmanage/show_model_convert_info?ID={{.ID}}" title="{{.Name}}" style="font-size: 14px;">
  95. <span class="fitted" style="width: 90%;vertical-align: middle;">{{.Name}}</span>
  96. </a>
  97. </div>
  98. <div class="two wide column padding0" style="padding-left: 2.2rem !important;">
  99. <span class="job-status" id="{{.ID}}" data-repopath="{{$.RepoRelPath}}/modelmanage" data-jobid="{{.ID}}" data-version="">
  100. <span><i id="{{.ID}}-icon" style="vertical-align: middle;" class="{{.Status}}"></i><span id="{{.ID}}-text" style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span>
  101. </span>
  102. </div>
  103. <div class="two wide column center padding0">
  104. <span style="font-size: 12px;">{{if eq .SrcEngine 0}}PyTorch {{else if eq .SrcEngine 1}}TensorFlow{{else if eq .SrcEngine 2}}MindSpore {{end}}</span>
  105. </div>
  106. <div class="two wide column center padding0">
  107. <span style="font-size: 12px;">{{if eq .DestFormat 0}}ONNX {{else if eq .DestFormat 1}}TensorRT {{end}}</span>
  108. </div>
  109. <div class="two wide column center padding0">
  110. <span style="font-size: 12px;" class="">{{TimeSinceUnix .CreatedUnix $.Lang}}</span>
  111. </div>
  112. <div class="one wide column text center padding0">
  113. <a href="{{AppSubUrl}}/{{.UserName}}" title="{{.UserName}}"><img class="ui avatar image" src="{{.UserRelAvatarLink}}"></a>
  114. </div>
  115. <div class="three wide column text center padding0">
  116. <div class="ui compact buttons" >
  117. <!-- 停止任务 -->
  118. <form id="stopForm-{{.ID}}" style="margin-left:-1px;" action="{{$.RepoLink}}/modelmanage/convert_stop/{{.ID}}" method="post">
  119. {{$.CsrfTokenHtml}}
  120. {{if .IsCanDelete}}
  121. <a id="ai-stop-{{.ID}}" href="javascript:stopTask('{{.ID}}');" class='ui basic model_stop {{if eq .Status "COMPLETED" "STOPPED" "FAILED" "START_FAILED" "STOPPING" "CREATING" "STARTING" "SUCCEEDED"}}disabled {{else}}blue {{end}}button' >
  122. {{$.i18n.Tr "repo.stop"}}
  123. </a>
  124. {{else}}
  125. <a class="ui basic disabled button">{{$.i18n.Tr "repo.stop"}} </a>
  126. {{end}}
  127. </form>
  128. <!-- 删除任务 -->
  129. <form id="delForm-{{.ID}}" action="{{$.RepoLink}}/modelmanage/delete_model_convert/{{.ID}}" method="post">
  130. {{$.CsrfTokenHtml}}
  131. {{if .IsCanDelete}}
  132. <a id="ai-delete-{{.ID}}" class='ui basic ai_delete blue button' style="border-radius: .28571429rem;">
  133. {{$.i18n.Tr "repo.delete"}}
  134. </a>
  135. {{else}}
  136. <a class="ui basic disabled button">{{$.i18n.Tr "repo.delete"}} </a>
  137. {{end}}
  138. </form>
  139. {{if .IsCanOper}}
  140. <a id="ai-download-{{.ID}}" href="{{$.Repository.HTMLURL}}/modelmanage/download_model_convert/{{.ID}}?AllDownload=true&a=1" class='ui basic {{if eq .Status "SUCCEEDED" "COMPLETED"}}blue {{else}}disabled {{end}}button' style="border-radius: .28571429rem;">
  141. {{$.i18n.Tr "repo.modelconvert.download"}}
  142. </a>
  143. {{else}}
  144. <a class="ui basic disabled button">{{$.i18n.Tr "repo.modelconvert.download"}}</a>
  145. {{end}}
  146. </div>
  147. </div>
  148. </div>
  149. </div>
  150. {{end}}
  151. <div id="app" style="margin-top: 2rem;">
  152. <div class="center">
  153. <el-pagination
  154. background
  155. @current-change="handleCurrentChange"
  156. :current-page="page"
  157. :page-sizes="[10]"
  158. :page-size="10"
  159. layout="total, sizes, prev, pager, next, jumper"
  160. :total="{{.Page.Paginater.Total}}">
  161. </el-pagination>
  162. </div>
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. </div>
  168. {{end}}
  169. </div>
  170. </div>
  171. </div>
  172. <!-- 确认模态框 -->
  173. <div id="deletemodel">
  174. <div class="ui basic modal first">
  175. <div class="ui icon header">
  176. <i class="trash icon"></i> 删除模型
  177. </div>
  178. <div class="content">
  179. <p>你确认删除该模型转换任务么?一旦删除不可恢复。</p>
  180. </div>
  181. <div class="actions">
  182. <div class="ui red basic inverted cancel button">
  183. <i class="remove icon"></i> {{.i18n.Tr "cloudbrain.operate_cancel"}}
  184. </div>
  185. <div class="ui green basic inverted ok button">
  186. <i class="checkmark icon"></i> {{.i18n.Tr "cloudbrain.operate_confirm"}}
  187. </div>
  188. </div>
  189. </div>
  190. </div>
  191. <div id="newmodelconvert">
  192. <div class="ui modal second">
  193. <div class="header" style="padding: 1rem;background-color: rgba(240, 240, 240, 100);">
  194. <h4 id="model_header"></h4>
  195. </div>
  196. <div class="content content-padding">
  197. <div id="formdiv" class="ui form" >
  198. <input type="hidden" name="initModel" value="{{$.MODEL_COUNT}}">
  199. <div class="ui error message">
  200. <!-- <p>asdasdasd</p> -->
  201. </div>
  202. <input type="hidden" name="_csrf" value="">
  203. <div class="unite min_title required inline fields" id="task_name">
  204. <div class="three wide field right aligned">
  205. <label for="model_convert_name">{{$.i18n.Tr "repo.modelconvert.taskname"}}</label>
  206. </div>
  207. <div class="twelve wide field">
  208. <input id="model_convert_name" name="model_convert_name" required maxlength="25" onkeyup="this.value=this.value.replace(/[, ]/g,'')">
  209. </div>
  210. </div>
  211. <div class="unite min_title inline fields required">
  212. <div class="three wide field right aligned">
  213. <label for="choice_model">{{$.i18n.Tr "repo.modelconvert.modelname"}}</label>
  214. </div>
  215. <div class="ui dropdown selection search eight wide field loading" id="choice_model" name="choice_model">
  216. <div class="default text">{{$.i18n.Tr "repo.modelconvert.selectmodel"}}</div>
  217. <i class="dropdown icon"></i>
  218. <div class="menu" id="model-name">
  219. </div>
  220. </div>
  221. </div>
  222. <div class="unite min_title inline fields required">
  223. <div class="three wide field right aligned">
  224. <label for="choice_version">{{$.i18n.Tr "repo.modelconvert.modelversion"}}</label>
  225. </div>
  226. <div class="ui dropdown selection search eight wide field" id="choice_version">
  227. <input type="hidden" id="ModelVersion" name="ModelVersion" required>
  228. <div class="default text">{{$.i18n.Tr "repo.modelconvert.selectversion"}}</div>
  229. <i class="dropdown icon"></i>
  230. <div class="menu" id="model-version">
  231. </div>
  232. </div>
  233. </div>
  234. <div class="unite min_title inline fields required">
  235. <div class="three wide field right aligned">
  236. <label for="choice_file">{{$.i18n.Tr "repo.model.manage.modelfile"}}</label>
  237. </div>
  238. <div class="ui dropdown selection search eight wide field" id="choice_file">
  239. <input type="hidden" id="ModelFile" name="ModelFile" required>
  240. <div class="default text">{{$.i18n.Tr "repo.modelconvert.selectmodelfile"}}</div>
  241. <i class="dropdown icon"></i>
  242. <div class="menu" id="model-file">
  243. </div>
  244. </div>
  245. <div data-tooltip="{{.i18n.Tr "cloudbrain.model_convert_postfix_rule"}}" data-inverted="" data-variation="mini">
  246. <i class="question circle icon"></i>
  247. </div>
  248. </div>
  249. <div class="unite min_title inline fields required">
  250. <div class="three wide field right aligned">
  251. <label for="SrcEngine">{{$.i18n.Tr "repo.modelconvert.srcengine"}}</label>
  252. </div>
  253. <select id="SrcEngine" class="ui search dropdown eight wide field" placeholder="" style='color:#000000;' name="SrcEngine" onchange="javascript:srcEngineChanged()">
  254. </select>
  255. </div>
  256. <div class="unite min_title required inline fields" id="inputdataformat_div">
  257. <div class="three wide field right aligned">
  258. <label for="inputdataformat">{{$.i18n.Tr "repo.modelconvert.inputdataformat"}}</label>
  259. </div>
  260. <select id="inputdataformat" class="ui search dropdown eight wide field" placeholder="" style='width:50%' name="inputdataformat">
  261. <option name="NCHW" value="NCHW">NCHW</option>
  262. <option name="NHWC" value="NHWC">NHWC</option>
  263. </select>
  264. </div>
  265. <div class="unite min_title required inline fields" id="inputshape_div">
  266. <div class="three wide field right aligned">
  267. <label for="inputshape">{{$.i18n.Tr "repo.modelconvert.inputshape"}}</label>
  268. </div>
  269. <div class="eight wide field">
  270. <input id="inputshape" name="inputshape" placeholder="{{$.i18n.Tr "repo.modelconvert.inputshapetip"}}" required maxlength="25">
  271. </div>
  272. </div>
  273. <div class="unite min_title inline fields required">
  274. <div class="three wide field right aligned">
  275. <label for="DestFormat">{{$.i18n.Tr "repo.modelconvert.outputformat"}}</label>
  276. </div>
  277. <select id="DestFormat" class="ui search dropdown eight wide field" placeholder="" style='width:50%' name="DestFormat">
  278. </select>
  279. </div>
  280. <div class="unite min_title inline fields">
  281. <div class="three wide field right aligned">
  282. <label for="NetOutputFormat">{{$.i18n.Tr "repo.modelconvert.netoutputdata"}}&nbsp;&nbsp;</label>
  283. </div>
  284. <select id="NetOutputFormat" class="ui search dropdown eight wide field" placeholder="" style='width:50%' name="NetOutputFormat">
  285. </select>
  286. </div>
  287. <div class="unite min_title inline fields">
  288. <div class="three wide field right aligned">
  289. <label for="Description">{{$.i18n.Tr "repo.modelconvert.taskdesc"}}&nbsp;&nbsp;</label>
  290. </div>
  291. <div class="twelve wide field">
  292. <textarea id="Description" name="Description" rows="1" maxlength="255" placeholder='{{.i18n.Tr "repo.modelarts.train_job.new_place"}}' onchange="this.value=this.value.substring(0, 255)" onkeydown="this.value=this.value.substring(0, 255)" onkeyup="this.value=this.value.substring(0, 256)"></textarea>
  293. </div>
  294. </div>
  295. <div class="unite min_title inline field">
  296. <button id="submitId" name="submitId" type="button" class="ui create_train_job green button" style="position: absolute;margin-left: 150px;">
  297. {{$.i18n.Tr "repo.modelconvert.newtask"}}
  298. </button>
  299. </div>
  300. </div>
  301. <div class="actions" style="display: inline-block;margin-left: 250px;">
  302. <button class="ui button cancel" >{{.i18n.Tr "repo.cloudbrain.cancel"}}</button>
  303. </div>
  304. </div>
  305. </div>
  306. </div>
  307. {{template "base/footer" .}}
  308. <script>
  309. let repolink = {{.RepoLink}}
  310. let repoId = {{$repository}}
  311. const {_AppSubUrl, _StaticUrlPrefix, csrf} = window.config;
  312. $('input[name="_csrf"]').val(csrf)
  313. var modelData;
  314. function inputshapeNotValid(value){
  315. if(value == null || value ==""){
  316. return true;
  317. }
  318. var tmps = value.split(",");
  319. if(tmps.length ==4){
  320. return false;
  321. }else{
  322. return true;
  323. }
  324. }
  325. $('#submitId').click(function(){
  326. let data={};
  327. data['_csrf']=csrf
  328. data['name']= $('#model_convert_name').val()
  329. if(data['name']==""){
  330. $('.ui.error.message').text("{{.i18n.Tr "repo.modelconvert.tasknameempty"}}")
  331. $('.ui.error.message').css('display','block')
  332. $("#task_name").addClass("error")
  333. return false
  334. }else{
  335. $("#task_name").removeClass("error")
  336. }
  337. data['desc']= $('#Description').val()
  338. data['modelId'] = $('#ModelVersion').val()
  339. data['SrcEngine'] = $('#SrcEngine').val();
  340. data['inputshape']= $('#inputshape').val();
  341. if(inputshapeNotValid(data['inputshape'])){
  342. $('.ui.error.message').text("{{.i18n.Tr "repo.modelconvert.inputshapeerror"}}")
  343. $('.ui.error.message').css('display','block')
  344. $("#inputshape_div").addClass("error")
  345. return false
  346. }else{
  347. $("#inputshape_div").removeClass("error")
  348. }
  349. data['inputdataformat']= $('#inputdataformat').val();
  350. data['DestFormat'] = $('#DestFormat').val();
  351. data['NetOutputFormat']= $('#NetOutputFormat').val();
  352. data['ModelFile'] = $('#ModelFile').val();
  353. $.post(`${repolink}/modelmanage/create_model_convert`,data,(result) => {
  354. console.log("result=" + result);
  355. if(result.result_code ==0){
  356. $('.ui.modal.second').modal('hide');
  357. window.location.reload();
  358. }else{
  359. $('.ui.error.message').text(result.message)
  360. $('.ui.error.message').css('display','block')
  361. }
  362. })
  363. })
  364. function stopTask(id){
  365. console.log("stop form stopForm-" + id);
  366. document.getElementById("stopForm-" + id).submit();
  367. }
  368. function createModelName(){
  369. let repoName = location.pathname.split('/')[2]
  370. let modelName = repoName + '_modelConvert_' + Math.random().toString(36).substr(2, 4)
  371. $('#model_convert_name').val(modelName)
  372. }
  373. function showcreate(obj){
  374. $('.ui.modal.second')
  375. .modal({
  376. centered: false,
  377. onShow:function(){
  378. $('#model_header').text("{{.i18n.Tr "repo.modelconvert.createtask"}}")
  379. $('.ui.dimmer').css({"background-color":"rgb(136, 136, 136,0.7)"})
  380. createModelName()
  381. loadModelList()
  382. },
  383. onHide:function(){
  384. //document.getElementById("formId").reset();
  385. $('#model_convert_name').val("")
  386. $('#choice_model').dropdown('clear')
  387. $('#choice_version').dropdown('clear')
  388. $('#choice_file').dropdown('clear')
  389. console.log("div hidde ....");
  390. $('.ui.dimmer').css({"background-color":""})
  391. $('.ui.error.message').text()
  392. $('.ui.error.message').css('display','none')
  393. $("#task_name").removeClass("error")
  394. $("#inputshape_div").removeClass("error")
  395. }
  396. })
  397. .modal('show')
  398. }
  399. $(function(){
  400. $('#choice_model').dropdown({
  401. onChange:function(value){
  402. $("#choice_model").addClass("loading")
  403. $('#choice_version').dropdown('clear')
  404. $('#choice_file').dropdown('clear')
  405. $("#model-version").empty()
  406. $("#model-file").empty()
  407. loadModelVersion(value)
  408. $("#choice_model").removeClass("loading")
  409. }
  410. })
  411. $('#choice_version').dropdown({
  412. onChange:function(value){
  413. console.log("model version:" + value);
  414. $('#choice_version input[name="ModelVersion"]').val(value)
  415. loadModelFile(value);
  416. }
  417. })
  418. $('#choice_file').dropdown({
  419. onChange:function(value){
  420. console.log("model file:" + value);
  421. $('#choice_file input[name="ModelFile"]').val(value)
  422. }
  423. })
  424. })
  425. function srcEngineChanged(){
  426. var ele = window.document.getElementById("SrcEngine");
  427. var index=ele.selectedIndex;
  428. var options=ele.options;
  429. var option = options[index];
  430. console.log("SrcEngine value=" + option);
  431. let destFormatHtml = "<option name=\"ONNX\" value=\"0\">ONNX</option>";
  432. let netOutputFormatHtml = "<option name=\"FP32\" value=\"0\">FP32</option>";
  433. if(option==null || option =="undefined" || option.value == 0){
  434. destFormatHtml += "<option name=\"TensorRT\" value=\"1\">TensorRT</option>"
  435. netOutputFormatHtml += "<option name=\"FP16\" value=\"1\">FP16</option>";
  436. }
  437. $('#DestFormat').html(destFormatHtml);
  438. $('#NetOutputFormat').html(netOutputFormatHtml);
  439. }
  440. function loadModelList(){
  441. $.get(`${repolink}/modelmanage/query_model_for_predict?repoId=${repoId}&type=-1`, (data) => {
  442. modelData = data
  443. let nameList = data.nameList
  444. const n_length = nameList.length
  445. let train_html=''
  446. for (let i=0;i<n_length;i++){
  447. train_html += `<div class="item" data-value="${nameList[i]}">${nameList[i]}</div>`
  448. train_html += '</div>'
  449. }
  450. $("#model-name").append(train_html)
  451. $("#choice_model").removeClass("loading")
  452. $('#choice_model .default.text').text(nameList[0])
  453. loadModelVersion(nameList[0])
  454. })
  455. }
  456. function loadModelFile(modelId){
  457. console.log("modelId=" + modelId);
  458. $('#choice_file').dropdown('clear')
  459. $("#model-file").empty()
  460. if(modelId ==null || modelId ==""){
  461. console.log("modelId is null");
  462. }else{
  463. $.get(`${repolink}/modelmanage/query_modelfile_for_predict?ID=${modelId}`, (data) => {
  464. const n_length = data.length
  465. let file_html=''
  466. let firstFileName =''
  467. for (let i=0;i<n_length;i++){
  468. if(isModel(data[i].FileName)){
  469. if(firstFileName ==''){
  470. firstFileName = data[i].FileName;
  471. }
  472. file_html += `<div class="item" data-value="${data[i].FileName}">${data[i].FileName}</div>`
  473. file_html += '</div>'
  474. }else{
  475. console.log("not model. filename=" + data[i].FileName);
  476. }
  477. }
  478. $("#model-file").append(file_html)
  479. $('#choice_file .default.text').text(firstFileName)
  480. $('#choice_file input[name="ModelFile"]').val(firstFileName)
  481. })
  482. }
  483. }
  484. function isModel(filename){
  485. var postfix=[".pth",".pkl",".onnx",".mindir",".ckpt",".pb"];
  486. for(var i =0; i<postfix.length;i++){
  487. if(filename.substring(filename.length-postfix[i].length)==postfix[i]){
  488. return true;
  489. }
  490. }
  491. return false;
  492. }
  493. function loadModelVersion(value){
  494. console.log("value=" + value);
  495. if(value ==null || value ==""){
  496. }else{
  497. let nameMap = modelData.nameMap
  498. let versionList = nameMap[value]
  499. n_length = versionList.length
  500. let train_html=''
  501. for (let i=0;i<n_length;i++){
  502. train_html += `<div class="item" data-value="${versionList[i].ID}">${versionList[i].Version}</div>`
  503. train_html += '</div>'
  504. }
  505. $("#model-version").append(train_html)
  506. $('#choice_version .default.text').text(versionList[0].Version)
  507. $('#choice_version input[name="ModelVersion"]').val(versionList[0].ID)
  508. loadModelFile(versionList[0].ID);
  509. }
  510. setEngineValue(value);
  511. }
  512. function setEngineValue(value){
  513. $('#SrcEngine').dropdown('clear');
  514. console.log("setEngineValue value=" + value);
  515. let html = ""
  516. html +="<option name=\"PyTorch\" " + getSelected(0,value) + " value=\"0\">PyTorch</option>";
  517. html +="<option name=\"TensorFlow\" " + getSelected(1,value) + " value=\"1\">TensorFlow</option>";
  518. html +="<option name=\"MindSpore\" " + getSelected(2,value) + " value=\"2\">MindSpore</option>";
  519. $('#SrcEngine').html(html);
  520. srcEngineChanged();
  521. }
  522. function getSelected(engineOption, modelName){
  523. if(modelName ==null || modelName ==""){
  524. return "";
  525. }
  526. let nameMap = modelData.nameMap
  527. let versionList = nameMap[modelName]
  528. if(versionList != null && versionList.length >0){
  529. if(versionList[0].Engine == engineOption){
  530. return "selected=\"selected\"";
  531. }else{
  532. if(versionList[0].Engine==122 && engineOption==2){
  533. return "selected=\"selected\"";
  534. }
  535. if(versionList[0].Engine==121 && engineOption==1){
  536. return "selected=\"selected\"";
  537. }
  538. }
  539. }
  540. return "";
  541. }
  542. </script>