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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  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">&nbsp;{{$.i18n.Tr "repo.modelconvert.importfirst2"}}&nbsp;</a>{{$.i18n.Tr "repo.modelconvert.importfirst3"}}</div>
  53. {{end}}
  54. <div class="bgtask-content-txt">{{$.i18n.Tr "repo.platform_instructions1"}}<a href="https://git.openi.org.cn/zeizei/OpenI_Learning">&nbsp;{{$.i18n.Tr "repo.platform_instructions2"}}&nbsp;</a>{{$.i18n.Tr "repo.platform_instructions3"}}</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" id="ModelFile_Div">
  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. if(data['ModelFile']==""){
  354. $('.ui.error.message').text("{{.i18n.Tr "repo.modelconvert.modelfileempty"}}")
  355. $('.ui.error.message').css('display','block')
  356. $("#ModelFile_Div").addClass("error")
  357. return false
  358. }else{
  359. $("#ModelFile_Div").removeClass("error")
  360. }
  361. $.post(`${repolink}/modelmanage/create_model_convert`,data,(result) => {
  362. console.log("result=" + result);
  363. if(result.result_code ==0){
  364. $('.ui.modal.second').modal('hide');
  365. window.location.reload();
  366. }else{
  367. $('.ui.error.message').text(result.message)
  368. $('.ui.error.message').css('display','block')
  369. }
  370. })
  371. })
  372. function stopTask(id){
  373. console.log("stop form stopForm-" + id);
  374. document.getElementById("stopForm-" + id).submit();
  375. }
  376. function createModelName(){
  377. let repoName = location.pathname.split('/')[2]
  378. let modelName = repoName + '_modelConvert_' + Math.random().toString(36).substr(2, 4)
  379. $('#model_convert_name').val(modelName)
  380. }
  381. function showcreate(obj){
  382. $('.ui.modal.second')
  383. .modal({
  384. centered: false,
  385. onShow:function(){
  386. $('#model_header').text("{{.i18n.Tr "repo.modelconvert.createtask"}}")
  387. $('.ui.dimmer').css({"background-color":"rgb(136, 136, 136,0.7)"})
  388. createModelName()
  389. loadModelList()
  390. },
  391. onHide:function(){
  392. //document.getElementById("formId").reset();
  393. $('#model_convert_name').val("")
  394. $('#choice_model').dropdown('clear')
  395. $('#choice_version').dropdown('clear')
  396. $('#choice_file').dropdown('clear')
  397. console.log("div hidde ....");
  398. $('.ui.dimmer').css({"background-color":""})
  399. $('.ui.error.message').text()
  400. $('.ui.error.message').css('display','none')
  401. $("#task_name").removeClass("error")
  402. $("#inputshape_div").removeClass("error")
  403. }
  404. })
  405. .modal('show')
  406. }
  407. $(function(){
  408. $('#choice_model').dropdown({
  409. onChange:function(value){
  410. $("#choice_model").addClass("loading")
  411. $('#choice_version').dropdown('clear')
  412. $('#choice_file').dropdown('clear')
  413. $("#model-version").empty()
  414. $("#model-file").empty()
  415. loadModelVersion(value)
  416. $("#choice_model").removeClass("loading")
  417. }
  418. })
  419. $('#choice_version').dropdown({
  420. onChange:function(value){
  421. console.log("model version:" + value);
  422. $('#choice_version input[name="ModelVersion"]').val(value)
  423. loadModelFile(value);
  424. }
  425. })
  426. $('#choice_file').dropdown({
  427. onChange:function(value){
  428. console.log("model file:" + value);
  429. $('#choice_file input[name="ModelFile"]').val(value)
  430. }
  431. })
  432. })
  433. function srcEngineChanged(){
  434. var ele = window.document.getElementById("SrcEngine");
  435. var index=ele.selectedIndex;
  436. var options=ele.options;
  437. var option = options[index];
  438. console.log("SrcEngine value=" + option);
  439. let destFormatHtml = "<option name=\"ONNX\" value=\"0\">ONNX</option>";
  440. let netOutputFormatHtml = "<option name=\"FP32\" value=\"0\">FP32</option>";
  441. if(option==null || option =="undefined" || option.value == 0){
  442. destFormatHtml += "<option name=\"TensorRT\" value=\"1\">TensorRT</option>"
  443. netOutputFormatHtml += "<option name=\"FP16\" value=\"1\">FP16</option>";
  444. }
  445. $('#DestFormat').html(destFormatHtml);
  446. $('#NetOutputFormat').html(netOutputFormatHtml);
  447. }
  448. function loadModelList(){
  449. $.get(`${repolink}/modelmanage/query_model_for_predict?repoId=${repoId}&type=-1`, (data) => {
  450. modelData = data
  451. let nameList = data.nameList
  452. const n_length = nameList.length
  453. let train_html=''
  454. for (let i=0;i<n_length;i++){
  455. train_html += `<div class="item" data-value="${nameList[i]}">${nameList[i]}</div>`
  456. train_html += '</div>'
  457. }
  458. $("#model-name").append(train_html)
  459. $("#choice_model").removeClass("loading")
  460. $('#choice_model .default.text').text(nameList[0])
  461. loadModelVersion(nameList[0])
  462. })
  463. }
  464. function loadModelFile(modelId){
  465. console.log("modelId=" + modelId);
  466. $('#choice_file').dropdown('clear')
  467. $("#model-file").empty()
  468. if(modelId ==null || modelId ==""){
  469. console.log("modelId is null");
  470. }else{
  471. $.get(`${repolink}/modelmanage/query_modelfile_for_predict?ID=${modelId}`, (data) => {
  472. const n_length = data.length
  473. let file_html=''
  474. let firstFileName =''
  475. for (let i=0;i<n_length;i++){
  476. if(isModel(data[i].FileName)){
  477. if(firstFileName ==''){
  478. firstFileName = data[i].FileName;
  479. }
  480. file_html += `<div class="item" data-value="${data[i].FileName}">${data[i].FileName}</div>`
  481. file_html += '</div>'
  482. }else{
  483. console.log("not model. filename=" + data[i].FileName);
  484. }
  485. }
  486. $("#model-file").append(file_html)
  487. $('#choice_file .default.text').text(firstFileName)
  488. $('#choice_file input[name="ModelFile"]').val(firstFileName)
  489. })
  490. }
  491. }
  492. function isModel(filename){
  493. var postfix=[".pth",".pkl",".onnx",".mindir",".ckpt",".pb"];
  494. for(var i =0; i<postfix.length;i++){
  495. if(filename.substring(filename.length-postfix[i].length)==postfix[i]){
  496. return true;
  497. }
  498. }
  499. return false;
  500. }
  501. function loadModelVersion(value){
  502. console.log("value=" + value);
  503. if(value ==null || value ==""){
  504. }else{
  505. let nameMap = modelData.nameMap
  506. let versionList = nameMap[value]
  507. n_length = versionList.length
  508. let train_html=''
  509. for (let i=0;i<n_length;i++){
  510. train_html += `<div class="item" data-value="${versionList[i].ID}">${versionList[i].Version}</div>`
  511. train_html += '</div>'
  512. }
  513. $("#model-version").append(train_html)
  514. $('#choice_version .default.text').text(versionList[0].Version)
  515. $('#choice_version input[name="ModelVersion"]').val(versionList[0].ID)
  516. loadModelFile(versionList[0].ID);
  517. }
  518. setEngineValue(value);
  519. }
  520. function setEngineValue(value){
  521. $('#SrcEngine').dropdown('clear');
  522. console.log("setEngineValue value=" + value);
  523. let html = ""
  524. html +="<option name=\"PyTorch\" " + getSelected(0,value) + " value=\"0\">PyTorch</option>";
  525. html +="<option name=\"TensorFlow\" " + getSelected(1,value) + " value=\"1\">TensorFlow</option>";
  526. html +="<option name=\"MindSpore\" " + getSelected(2,value) + " value=\"2\">MindSpore</option>";
  527. $('#SrcEngine').html(html);
  528. srcEngineChanged();
  529. }
  530. function getSelected(engineOption, modelName){
  531. if(modelName ==null || modelName ==""){
  532. return "";
  533. }
  534. let nameMap = modelData.nameMap
  535. let versionList = nameMap[modelName]
  536. if(versionList != null && versionList.length >0){
  537. if(versionList[0].Engine == engineOption){
  538. return "selected=\"selected\"";
  539. }else{
  540. if(versionList[0].Engine==122 && engineOption==2){
  541. return "selected=\"selected\"";
  542. }
  543. if(versionList[0].Engine==121 && engineOption==1){
  544. return "selected=\"selected\"";
  545. }
  546. }
  547. }
  548. return "";
  549. }
  550. </script>