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 11 kB

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