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.2 kB

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