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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. package models
  2. import (
  3. "fmt"
  4. "code.gitea.io/gitea/modules/log"
  5. "code.gitea.io/gitea/modules/setting"
  6. "code.gitea.io/gitea/modules/timeutil"
  7. "xorm.io/builder"
  8. "xorm.io/xorm"
  9. )
  10. type AiModelManage struct {
  11. ID string `xorm:"pk"`
  12. Name string `xorm:"INDEX NOT NULL"`
  13. Version string `xorm:"NOT NULL"`
  14. VersionCount int `xorm:"NOT NULL DEFAULT 0"`
  15. New int `xorm:"NOT NULL"`
  16. Type int `xorm:"NOT NULL"`
  17. Size int64 `xorm:"NOT NULL"`
  18. Description string `xorm:"varchar(2000)"`
  19. Label string `xorm:"varchar(1000)"`
  20. Path string `xorm:"varchar(400) NOT NULL"`
  21. DownloadCount int `xorm:"NOT NULL DEFAULT 0"`
  22. Engine int64 `xorm:"NOT NULL DEFAULT 0"`
  23. Status int `xorm:"NOT NULL DEFAULT 0"`
  24. Accuracy string `xorm:"varchar(1000)"`
  25. AttachmentId string `xorm:"NULL"`
  26. RepoId int64 `xorm:"INDEX NULL"`
  27. CodeBranch string `xorm:"varchar(400) NULL"`
  28. CodeCommitID string `xorm:"NULL"`
  29. UserId int64 `xorm:"NOT NULL"`
  30. UserName string
  31. UserRelAvatarLink string
  32. TrainTaskInfo string `xorm:"text NULL"`
  33. CreatedUnix timeutil.TimeStamp `xorm:"created"`
  34. UpdatedUnix timeutil.TimeStamp `xorm:"updated"`
  35. IsCanOper bool
  36. IsCanDelete bool
  37. }
  38. type AiModelConvert struct {
  39. ID string `xorm:"pk"`
  40. Name string `xorm:"INDEX NOT NULL"`
  41. Status string `xorm:"NULL"`
  42. SrcEngine int `xorm:"NOT NULL DEFAULT 0"`
  43. RepoId int64 `xorm:"INDEX NULL"`
  44. ModelId string `xorm:"NOT NULL"`
  45. ModelVersion string `xorm:"NOT NULL"`
  46. ModelPath string `xorm:"NULL"`
  47. DestFormat int `xorm:"NOT NULL DEFAULT 0"`
  48. NetOutputFormat int `xorm:"NULL"`
  49. UserId int64 `xorm:"NOT NULL"`
  50. CloudBrainTaskId string `xorm:"NULL"`
  51. RunTime int64 `xorm:"NULL"`
  52. TrainJobDuration string
  53. InputShape string `xorm:"varchar(2000)"`
  54. InputDataFormat string `xorm:"NOT NULL"`
  55. Description string `xorm:"varchar(2000)"`
  56. Path string `xorm:"varchar(400) NOT NULL"`
  57. CreatedUnix timeutil.TimeStamp `xorm:"created"`
  58. UpdatedUnix timeutil.TimeStamp `xorm:"updated"`
  59. UserName string
  60. UserRelAvatarLink string
  61. IsCanOper bool
  62. IsCanDelete bool
  63. }
  64. type AiModelQueryOptions struct {
  65. ListOptions
  66. RepoID int64 // include all repos if empty
  67. UserID int64
  68. ModelID string
  69. SortType string
  70. New int
  71. // JobStatus CloudbrainStatus
  72. Type int
  73. Status int
  74. }
  75. func UpdateModelConvertCBTI(id string, CloudBrainTaskId string) error {
  76. var sess *xorm.Session
  77. sess = x.ID(id)
  78. defer sess.Close()
  79. re, err := sess.Cols("cloud_brain_task_id").Update(&AiModelConvert{
  80. CloudBrainTaskId: CloudBrainTaskId,
  81. })
  82. if err != nil {
  83. return err
  84. }
  85. log.Info("success to update cloud_brain_task_id from db.re=" + fmt.Sprint((re)))
  86. return nil
  87. }
  88. func SaveModelConvert(modelConvert *AiModelConvert) error {
  89. sess := x.NewSession()
  90. defer sess.Close()
  91. re, err := sess.Insert(modelConvert)
  92. if err != nil {
  93. log.Info("insert modelConvert error." + err.Error())
  94. return err
  95. }
  96. log.Info("success to save modelConvert db.re=" + fmt.Sprint((re)))
  97. return nil
  98. }
  99. func SaveModelToDb(model *AiModelManage) error {
  100. sess := x.NewSession()
  101. defer sess.Close()
  102. re, err := sess.Insert(model)
  103. if err != nil {
  104. log.Info("insert error." + err.Error())
  105. return err
  106. }
  107. log.Info("success to save db.re=" + fmt.Sprint((re)))
  108. return nil
  109. }
  110. func QueryModelConvertById(id string) (*AiModelConvert, error) {
  111. sess := x.NewSession()
  112. defer sess.Close()
  113. sess.Select("*").Table(new(AiModelConvert)).Where("id='" + id + "'")
  114. aiModelManageConvertList := make([]*AiModelConvert, 0)
  115. err := sess.Find(&aiModelManageConvertList)
  116. if err == nil {
  117. if len(aiModelManageConvertList) == 1 {
  118. return aiModelManageConvertList[0], nil
  119. }
  120. }
  121. return nil, err
  122. }
  123. func QueryModelById(id string) (*AiModelManage, error) {
  124. sess := x.NewSession()
  125. defer sess.Close()
  126. sess.Select("*").Table("ai_model_manage").
  127. Where("id='" + id + "'")
  128. aiModelManageList := make([]*AiModelManage, 0)
  129. err := sess.Find(&aiModelManageList)
  130. if err == nil {
  131. if len(aiModelManageList) == 1 {
  132. return aiModelManageList[0], nil
  133. }
  134. } else {
  135. log.Info("error=" + err.Error())
  136. }
  137. return nil, err
  138. }
  139. func DeleteModelConvertById(id string) error {
  140. sess := x.NewSession()
  141. defer sess.Close()
  142. re, err := sess.Delete(&AiModelConvert{
  143. ID: id,
  144. })
  145. if err != nil {
  146. return err
  147. }
  148. log.Info("success to delete AiModelManageConvert from db.re=" + fmt.Sprint((re)))
  149. return nil
  150. }
  151. func DeleteModelById(id string) error {
  152. sess := x.NewSession()
  153. defer sess.Close()
  154. re, err := sess.Delete(&AiModelManage{
  155. ID: id,
  156. })
  157. if err != nil {
  158. return err
  159. }
  160. log.Info("success to delete from db.re=" + fmt.Sprint((re)))
  161. return nil
  162. }
  163. func ModifyModelDescription(id string, description string) error {
  164. var sess *xorm.Session
  165. sess = x.ID(id)
  166. defer sess.Close()
  167. re, err := sess.Cols("description").Update(&AiModelManage{
  168. Description: description,
  169. })
  170. if err != nil {
  171. return err
  172. }
  173. log.Info("success to update description from db.re=" + fmt.Sprint((re)))
  174. return nil
  175. }
  176. func ModifyModelNewProperty(id string, new int, versioncount int) error {
  177. var sess *xorm.Session
  178. sess = x.ID(id)
  179. defer sess.Close()
  180. re, err := sess.Cols("new", "version_count").Update(&AiModelManage{
  181. New: new,
  182. VersionCount: versioncount,
  183. })
  184. if err != nil {
  185. return err
  186. }
  187. log.Info("success to update new property from db.re=" + fmt.Sprint((re)))
  188. return nil
  189. }
  190. func ModifyModelDownloadCount(id string) error {
  191. sess := x.NewSession()
  192. defer sess.Close()
  193. if _, err := sess.Exec("UPDATE `ai_model_manage` SET download_count = download_count + 1 WHERE id = ?", id); err != nil {
  194. return err
  195. }
  196. return nil
  197. }
  198. func QueryModelByName(name string, repoId int64) []*AiModelManage {
  199. sess := x.NewSession()
  200. defer sess.Close()
  201. sess.Select("*").Table("ai_model_manage").
  202. Where("name='" + name + "' and repo_id=" + fmt.Sprint(repoId)).OrderBy("created_unix desc")
  203. aiModelManageList := make([]*AiModelManage, 0)
  204. sess.Find(&aiModelManageList)
  205. return aiModelManageList
  206. }
  207. func QueryModel(opts *AiModelQueryOptions) ([]*AiModelManage, int64, error) {
  208. sess := x.NewSession()
  209. defer sess.Close()
  210. var cond = builder.NewCond()
  211. if opts.RepoID > 0 {
  212. cond = cond.And(
  213. builder.Eq{"ai_model_manage.repo_id": opts.RepoID},
  214. )
  215. }
  216. if opts.UserID > 0 {
  217. cond = cond.And(
  218. builder.Eq{"ai_model_manage.user_id": opts.UserID},
  219. )
  220. }
  221. if opts.New >= 0 {
  222. cond = cond.And(
  223. builder.Eq{"ai_model_manage.new": opts.New},
  224. )
  225. }
  226. if len(opts.ModelID) > 0 {
  227. cond = cond.And(
  228. builder.Eq{"ai_model_manage.id": opts.ModelID},
  229. )
  230. }
  231. if (opts.Type) >= 0 {
  232. cond = cond.And(
  233. builder.Eq{"ai_model_manage.type": opts.Type},
  234. )
  235. }
  236. count, err := sess.Where(cond).Count(new(AiModelManage))
  237. if err != nil {
  238. return nil, 0, fmt.Errorf("Count: %v", err)
  239. }
  240. if opts.Page >= 0 && opts.PageSize > 0 {
  241. var start int
  242. if opts.Page == 0 {
  243. start = 0
  244. } else {
  245. start = (opts.Page - 1) * opts.PageSize
  246. }
  247. sess.Limit(opts.PageSize, start)
  248. }
  249. sess.OrderBy("ai_model_manage.created_unix DESC")
  250. aiModelManages := make([]*AiModelManage, 0, setting.UI.IssuePagingNum)
  251. if err := sess.Table("ai_model_manage").Where(cond).
  252. Find(&aiModelManages); err != nil {
  253. return nil, 0, fmt.Errorf("Find: %v", err)
  254. }
  255. return aiModelManages, count, nil
  256. }
  257. func QueryModelConvert(opts *AiModelQueryOptions) ([]*AiModelConvert, int64, error) {
  258. sess := x.NewSession()
  259. defer sess.Close()
  260. var cond = builder.NewCond()
  261. if opts.RepoID > 0 {
  262. cond = cond.And(
  263. builder.Eq{"ai_model_convert.repo_id": opts.RepoID},
  264. )
  265. }
  266. if opts.UserID > 0 {
  267. cond = cond.And(
  268. builder.Eq{"ai_model_convert.user_id": opts.UserID},
  269. )
  270. }
  271. count, err := sess.Where(cond).Count(new(AiModelConvert))
  272. if err != nil {
  273. return nil, 0, fmt.Errorf("Count: %v", err)
  274. }
  275. if opts.Page >= 0 && opts.PageSize > 0 {
  276. var start int
  277. if opts.Page == 0 {
  278. start = 0
  279. } else {
  280. start = (opts.Page - 1) * opts.PageSize
  281. }
  282. sess.Limit(opts.PageSize, start)
  283. }
  284. sess.OrderBy("ai_model_convert.created_unix DESC")
  285. aiModelManageConvert := make([]*AiModelConvert, 0, setting.UI.IssuePagingNum)
  286. if err := sess.Table(new(AiModelConvert)).Where(cond).
  287. Find(&aiModelManageConvert); err != nil {
  288. return nil, 0, fmt.Errorf("Find: %v", err)
  289. }
  290. return aiModelManageConvert, count, nil
  291. }