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.

ai_model_manage.go 12 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  1. package models
  2. import (
  3. "fmt"
  4. "time"
  5. "code.gitea.io/gitea/modules/log"
  6. "code.gitea.io/gitea/modules/setting"
  7. "code.gitea.io/gitea/modules/timeutil"
  8. "xorm.io/builder"
  9. "xorm.io/xorm"
  10. )
  11. type AiModelManage struct {
  12. ID string `xorm:"pk"`
  13. Name string `xorm:"INDEX NOT NULL"`
  14. Version string `xorm:"NOT NULL"`
  15. VersionCount int `xorm:"NOT NULL DEFAULT 0"`
  16. New int `xorm:"NOT NULL"`
  17. Type int `xorm:"NOT NULL"`
  18. Size int64 `xorm:"NOT NULL"`
  19. Description string `xorm:"varchar(2000)"`
  20. Label string `xorm:"varchar(1000)"`
  21. Path string `xorm:"varchar(400) NOT NULL"`
  22. DownloadCount int `xorm:"NOT NULL DEFAULT 0"`
  23. Engine int64 `xorm:"NOT NULL DEFAULT 0"`
  24. Status int `xorm:"NOT NULL DEFAULT 0"`
  25. Accuracy string `xorm:"varchar(1000)"`
  26. AttachmentId string `xorm:"NULL"`
  27. RepoId int64 `xorm:"INDEX NULL"`
  28. CodeBranch string `xorm:"varchar(400) NULL"`
  29. CodeCommitID string `xorm:"NULL"`
  30. UserId int64 `xorm:"NOT NULL"`
  31. UserName string
  32. UserRelAvatarLink string
  33. TrainTaskInfo string `xorm:"text NULL"`
  34. CreatedUnix timeutil.TimeStamp `xorm:"created"`
  35. UpdatedUnix timeutil.TimeStamp `xorm:"updated"`
  36. IsCanOper bool
  37. IsCanDelete bool
  38. }
  39. type AiModelConvert struct {
  40. ID string `xorm:"pk"`
  41. Name string `xorm:"INDEX NOT NULL"`
  42. Status string `xorm:"NULL"`
  43. StatusResult string `xorm:"NULL"`
  44. SrcEngine int `xorm:"NOT NULL DEFAULT 0"`
  45. RepoId int64 `xorm:"INDEX NULL"`
  46. ModelId string `xorm:"NOT NULL"`
  47. ModelName string `xorm:"NULL"`
  48. ModelVersion string `xorm:"NOT NULL"`
  49. ModelPath string `xorm:"NULL"`
  50. DestFormat int `xorm:"NOT NULL DEFAULT 0"`
  51. NetOutputFormat int `xorm:"NULL"`
  52. UserId int64 `xorm:"NOT NULL"`
  53. CloudBrainTaskId string `xorm:"NULL"`
  54. ModelArtsVersionId string `xorm:"NULL"`
  55. ContainerID string
  56. ContainerIp string
  57. RunTime int64 `xorm:"NULL"`
  58. TrainJobDuration string
  59. InputShape string `xorm:"varchar(2000)"`
  60. InputDataFormat string `xorm:"NOT NULL"`
  61. Description string `xorm:"varchar(2000)"`
  62. Path string `xorm:"varchar(400) NOT NULL"`
  63. CreatedUnix timeutil.TimeStamp `xorm:"created"`
  64. UpdatedUnix timeutil.TimeStamp `xorm:"updated"`
  65. StartTime timeutil.TimeStamp
  66. EndTime timeutil.TimeStamp
  67. UserName string
  68. UserRelAvatarLink string
  69. IsCanOper bool
  70. IsCanDelete bool
  71. }
  72. type AiModelQueryOptions struct {
  73. ListOptions
  74. RepoID int64 // include all repos if empty
  75. UserID int64
  76. ModelID string
  77. SortType string
  78. New int
  79. // JobStatus CloudbrainStatus
  80. Type int
  81. Status int
  82. }
  83. func (a *AiModelConvert) IsGpuTrainTask() bool {
  84. if a.SrcEngine == 0 || a.SrcEngine == 1 {
  85. return true
  86. }
  87. return false
  88. }
  89. func ModelComputeAndSetDuration(task *AiModelConvert, result JobResultPayload) {
  90. if task.StartTime == 0 {
  91. task.StartTime = timeutil.TimeStamp(result.JobStatus.CreatedTime / 1000)
  92. }
  93. if task.EndTime == 0 {
  94. if result.JobStatus.CompletedTime > 0 {
  95. task.EndTime = timeutil.TimeStamp(result.JobStatus.CompletedTime / 1000)
  96. }
  97. }
  98. var d int64
  99. if task.StartTime == 0 {
  100. d = 0
  101. } else if task.EndTime == 0 {
  102. d = time.Now().Unix() - task.StartTime.AsTime().Unix()
  103. } else {
  104. d = task.EndTime.AsTime().Unix() - task.StartTime.AsTime().Unix()
  105. }
  106. if d < 0 {
  107. d = 0
  108. }
  109. task.RunTime = d
  110. task.TrainJobDuration = ConvertDurationToStr(d)
  111. }
  112. func ModelConvertSetDuration(task *AiModelConvert) {
  113. var d int64
  114. if task.StartTime == 0 {
  115. d = 0
  116. } else if task.EndTime == 0 {
  117. d = time.Now().Unix() - task.StartTime.AsTime().Unix()
  118. } else {
  119. d = task.EndTime.AsTime().Unix() - task.StartTime.AsTime().Unix()
  120. }
  121. if d < 0 {
  122. d = 0
  123. }
  124. task.RunTime = d
  125. task.TrainJobDuration = ConvertDurationToStr(d)
  126. }
  127. func UpdateModelConvertModelArts(id string, CloudBrainTaskId string, VersionId string) error {
  128. var sess *xorm.Session
  129. sess = x.ID(id)
  130. defer sess.Close()
  131. re, err := sess.Cols("cloud_brain_task_id,model_arts_version_id").Update(&AiModelConvert{
  132. CloudBrainTaskId: CloudBrainTaskId,
  133. ModelArtsVersionId: VersionId,
  134. })
  135. if err != nil {
  136. return err
  137. }
  138. log.Info("success to update cloud_brain_task_id from db.re=" + fmt.Sprint((re)))
  139. return nil
  140. }
  141. func UpdateModelConvertFailed(id string, status string, statusResult string) error {
  142. var sess *xorm.Session
  143. sess = x.ID(id)
  144. defer sess.Close()
  145. re, err := sess.Cols("status", "status_result").Update(&AiModelConvert{
  146. Status: status,
  147. StatusResult: statusResult,
  148. })
  149. if err != nil {
  150. return err
  151. }
  152. log.Info("success to update cloud_brain_task_id from db.re=" + fmt.Sprint((re)))
  153. return nil
  154. }
  155. func UpdateModelConvertCBTI(id string, CloudBrainTaskId string) error {
  156. var sess *xorm.Session
  157. sess = x.ID(id)
  158. defer sess.Close()
  159. re, err := sess.Cols("cloud_brain_task_id").Update(&AiModelConvert{
  160. CloudBrainTaskId: CloudBrainTaskId,
  161. })
  162. if err != nil {
  163. return err
  164. }
  165. log.Info("success to update cloud_brain_task_id from db.re=" + fmt.Sprint((re)))
  166. return nil
  167. }
  168. func UpdateModelConvert(job *AiModelConvert) error {
  169. return updateModelConvert(x, job)
  170. }
  171. func updateModelConvert(e Engine, job *AiModelConvert) error {
  172. var sess *xorm.Session
  173. sess = e.Where("id = ?", job.ID)
  174. _, err := sess.Cols("status", "train_job_duration", "run_time", "start_time", "end_time", "updated_unix").Update(job)
  175. return err
  176. }
  177. func SaveModelConvert(modelConvert *AiModelConvert) error {
  178. sess := x.NewSession()
  179. defer sess.Close()
  180. re, err := sess.Insert(modelConvert)
  181. if err != nil {
  182. log.Info("insert modelConvert error." + err.Error())
  183. return err
  184. }
  185. log.Info("success to save modelConvert db.re=" + fmt.Sprint((re)))
  186. return nil
  187. }
  188. func SaveModelToDb(model *AiModelManage) error {
  189. sess := x.NewSession()
  190. defer sess.Close()
  191. re, err := sess.Insert(model)
  192. if err != nil {
  193. log.Info("insert error." + err.Error())
  194. return err
  195. }
  196. log.Info("success to save db.re=" + fmt.Sprint((re)))
  197. return nil
  198. }
  199. func QueryModelConvertById(id string) (*AiModelConvert, error) {
  200. sess := x.NewSession()
  201. defer sess.Close()
  202. sess.Select("*").Table(new(AiModelConvert)).Where("id='" + id + "'")
  203. aiModelManageConvertList := make([]*AiModelConvert, 0)
  204. err := sess.Find(&aiModelManageConvertList)
  205. if err == nil {
  206. if len(aiModelManageConvertList) == 1 {
  207. return aiModelManageConvertList[0], nil
  208. }
  209. }
  210. return nil, err
  211. }
  212. func QueryModelById(id string) (*AiModelManage, error) {
  213. sess := x.NewSession()
  214. defer sess.Close()
  215. sess.Select("*").Table("ai_model_manage").
  216. Where("id='" + id + "'")
  217. aiModelManageList := make([]*AiModelManage, 0)
  218. err := sess.Find(&aiModelManageList)
  219. if err == nil {
  220. if len(aiModelManageList) == 1 {
  221. return aiModelManageList[0], nil
  222. }
  223. } else {
  224. log.Info("error=" + err.Error())
  225. }
  226. return nil, err
  227. }
  228. func DeleteModelConvertById(id string) error {
  229. sess := x.NewSession()
  230. defer sess.Close()
  231. re, err := sess.Delete(&AiModelConvert{
  232. ID: id,
  233. })
  234. if err != nil {
  235. return err
  236. }
  237. log.Info("success to delete AiModelManageConvert from db.re=" + fmt.Sprint((re)))
  238. return nil
  239. }
  240. func DeleteModelById(id string) error {
  241. sess := x.NewSession()
  242. defer sess.Close()
  243. re, err := sess.Delete(&AiModelManage{
  244. ID: id,
  245. })
  246. if err != nil {
  247. return err
  248. }
  249. log.Info("success to delete from db.re=" + fmt.Sprint((re)))
  250. return nil
  251. }
  252. func ModifyModelDescription(id string, description string) error {
  253. var sess *xorm.Session
  254. sess = x.ID(id)
  255. defer sess.Close()
  256. re, err := sess.Cols("description").Update(&AiModelManage{
  257. Description: description,
  258. })
  259. if err != nil {
  260. return err
  261. }
  262. log.Info("success to update description from db.re=" + fmt.Sprint((re)))
  263. return nil
  264. }
  265. func ModifyModelNewProperty(id string, new int, versioncount int) error {
  266. var sess *xorm.Session
  267. sess = x.ID(id)
  268. defer sess.Close()
  269. re, err := sess.Cols("new", "version_count").Update(&AiModelManage{
  270. New: new,
  271. VersionCount: versioncount,
  272. })
  273. if err != nil {
  274. return err
  275. }
  276. log.Info("success to update new property from db.re=" + fmt.Sprint((re)))
  277. return nil
  278. }
  279. func ModifyModelDownloadCount(id string) error {
  280. sess := x.NewSession()
  281. defer sess.Close()
  282. if _, err := sess.Exec("UPDATE `ai_model_manage` SET download_count = download_count + 1 WHERE id = ?", id); err != nil {
  283. return err
  284. }
  285. return nil
  286. }
  287. func QueryModelByName(name string, repoId int64) []*AiModelManage {
  288. sess := x.NewSession()
  289. defer sess.Close()
  290. sess.Select("*").Table("ai_model_manage").
  291. Where("name='" + name + "' and repo_id=" + fmt.Sprint(repoId)).OrderBy("created_unix desc")
  292. aiModelManageList := make([]*AiModelManage, 0)
  293. sess.Find(&aiModelManageList)
  294. return aiModelManageList
  295. }
  296. func QueryModel(opts *AiModelQueryOptions) ([]*AiModelManage, int64, error) {
  297. sess := x.NewSession()
  298. defer sess.Close()
  299. var cond = builder.NewCond()
  300. if opts.RepoID > 0 {
  301. cond = cond.And(
  302. builder.Eq{"ai_model_manage.repo_id": opts.RepoID},
  303. )
  304. }
  305. if opts.UserID > 0 {
  306. cond = cond.And(
  307. builder.Eq{"ai_model_manage.user_id": opts.UserID},
  308. )
  309. }
  310. if opts.New >= 0 {
  311. cond = cond.And(
  312. builder.Eq{"ai_model_manage.new": opts.New},
  313. )
  314. }
  315. if len(opts.ModelID) > 0 {
  316. cond = cond.And(
  317. builder.Eq{"ai_model_manage.id": opts.ModelID},
  318. )
  319. }
  320. if (opts.Type) >= 0 {
  321. cond = cond.And(
  322. builder.Eq{"ai_model_manage.type": opts.Type},
  323. )
  324. }
  325. count, err := sess.Where(cond).Count(new(AiModelManage))
  326. if err != nil {
  327. return nil, 0, fmt.Errorf("Count: %v", err)
  328. }
  329. if opts.Page >= 0 && opts.PageSize > 0 {
  330. var start int
  331. if opts.Page == 0 {
  332. start = 0
  333. } else {
  334. start = (opts.Page - 1) * opts.PageSize
  335. }
  336. sess.Limit(opts.PageSize, start)
  337. }
  338. sess.OrderBy("ai_model_manage.created_unix DESC")
  339. aiModelManages := make([]*AiModelManage, 0, setting.UI.IssuePagingNum)
  340. if err := sess.Table("ai_model_manage").Where(cond).
  341. Find(&aiModelManages); err != nil {
  342. return nil, 0, fmt.Errorf("Find: %v", err)
  343. }
  344. return aiModelManages, count, nil
  345. }
  346. func QueryModelConvertByRepoID(repoId int64) ([]*AiModelConvert, error) {
  347. sess := x.NewSession()
  348. defer sess.Close()
  349. var cond = builder.NewCond()
  350. cond = cond.And(
  351. builder.Eq{"ai_model_convert.repo_id": repoId},
  352. )
  353. sess.OrderBy("ai_model_convert.created_unix DESC")
  354. aiModelManageConvert := make([]*AiModelConvert, 0)
  355. if err := sess.Table(new(AiModelConvert)).Where(cond).
  356. Find(&aiModelManageConvert); err != nil {
  357. return nil, fmt.Errorf("Find: %v", err)
  358. }
  359. return aiModelManageConvert, nil
  360. }
  361. func QueryModelConvertByUserID(userID int64) ([]*AiModelConvert, error) {
  362. sess := x.NewSession()
  363. defer sess.Close()
  364. var cond = builder.NewCond()
  365. cond = cond.And(
  366. builder.Eq{"ai_model_convert.user_id": userID},
  367. )
  368. sess.OrderBy("ai_model_convert.created_unix DESC")
  369. aiModelManageConvert := make([]*AiModelConvert, 0)
  370. if err := sess.Table(new(AiModelConvert)).Where(cond).
  371. Find(&aiModelManageConvert); err != nil {
  372. return nil, fmt.Errorf("Find: %v", err)
  373. }
  374. return aiModelManageConvert, nil
  375. }
  376. func QueryModelConvert(opts *AiModelQueryOptions) ([]*AiModelConvert, int64, error) {
  377. sess := x.NewSession()
  378. defer sess.Close()
  379. var cond = builder.NewCond()
  380. if opts.RepoID > 0 {
  381. cond = cond.And(
  382. builder.Eq{"ai_model_convert.repo_id": opts.RepoID},
  383. )
  384. }
  385. if opts.UserID > 0 {
  386. cond = cond.And(
  387. builder.Eq{"ai_model_convert.user_id": opts.UserID},
  388. )
  389. }
  390. count, err := sess.Where(cond).Count(new(AiModelConvert))
  391. if err != nil {
  392. return nil, 0, fmt.Errorf("Count: %v", err)
  393. }
  394. if opts.Page >= 0 && opts.PageSize > 0 {
  395. var start int
  396. if opts.Page == 0 {
  397. start = 0
  398. } else {
  399. start = (opts.Page - 1) * opts.PageSize
  400. }
  401. sess.Limit(opts.PageSize, start)
  402. }
  403. sess.OrderBy("ai_model_convert.created_unix DESC")
  404. aiModelManageConvert := make([]*AiModelConvert, 0, setting.UI.IssuePagingNum)
  405. if err := sess.Table(new(AiModelConvert)).Where(cond).
  406. Find(&aiModelManageConvert); err != nil {
  407. return nil, 0, fmt.Errorf("Find: %v", err)
  408. }
  409. return aiModelManageConvert, count, nil
  410. }