ai.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. package aimod
  2. import (
  3. "eta_gn/eta_api/global"
  4. "time"
  5. )
  6. //type AiChatTopic struct {
  7. // AiChatTopicId int `orm:"column(ai_chat_topic_id);pk"`
  8. // TopicName string
  9. // SysUserId int
  10. // SysUserRealName string
  11. // AssistantId string
  12. // ThreadId string
  13. // CreateTime time.Time
  14. // ModifyTime time.Time
  15. //}
  16. type AiChatTopic struct {
  17. AiChatTopicId int `gorm:"primaryKey;column:ai_chat_topic_id;type:int(11);not null"`
  18. TopicName string `gorm:"column:topic_name;type:varchar(255);default:''"` // 话题名称
  19. SysUserId int `gorm:"column:sys_user_id;type:int(11);default:0"` // 创建人id
  20. SysUserRealName string `gorm:"column:sys_user_real_name;type:varchar(100);default:''"` // 创建人姓名
  21. CreateTime time.Time `gorm:"column:create_time;type:datetime"` // 创建时间
  22. ModifyTime time.Time `gorm:"column:modify_time;type:datetime"` // 修改时间
  23. AssistantId string `gorm:"column:assistant_id;type:varchar(255);default:''"` // 助手id
  24. ThreadId string `gorm:"column:thread_id;type:varchar(255);default:''"` // 进程id
  25. }
  26. //type AiChat struct {
  27. // AiChatId int `orm:"column(ai_chat_id);pk"`
  28. // AiChatTopicId int
  29. // Ask string
  30. // AskUuid string
  31. // Answer string
  32. // Model string
  33. // SysUserId int
  34. // SysUserRealName string `description:"提问人名称"`
  35. // OpenaiFileId string `description:"openai返回的文件id"`
  36. // OpenaiFileName string `description:"文件名称"`
  37. // OpenaiFilePath string `description:"文件路径"`
  38. // CreateTime time.Time
  39. // ModifyTime time.Time
  40. //}
  41. type AiChat struct {
  42. AiChatId int `gorm:"primaryKey;column:ai_chat_id;type:int(11);not null"`
  43. AiChatTopicId int `gorm:"column:ai_chat_topic_id;type:int(11);default:0"`
  44. Ask string `gorm:"column:ask;type:text"` // 提问
  45. AskUuid string `gorm:"index:idx_ask_uuid;column:ask_uuid;type:varchar(50);default:''"` // ask,md5值
  46. Answer string `gorm:"column:answer;type:text"` // 答案
  47. SysUserId int `gorm:"column:sys_user_id;type:int(11);default:0"` // 提问人id
  48. SysUserRealName string `gorm:"column:sys_user_real_name;type:varchar(100);default:''"` // 提问人名称
  49. Model string `gorm:"column:model;type:varchar(20);default:''"` // 模型
  50. CreateTime time.Time `gorm:"column:create_time;type:datetime"`
  51. ModifyTime time.Time `gorm:"column:modify_time;type:datetime"`
  52. OpenaiFileId string `gorm:"column:openai_file_id;type:varchar(255);default:''"` // openai返回的文件id
  53. OpenaiFileName string `gorm:"column:openai_file_name;type:varchar(255);default:''"` // 文件名称
  54. OpenaiFilePath string `gorm:"column:openai_file_path;type:varchar(255);default:''"` // 文件路径
  55. }
  56. type ChatReq struct {
  57. AiChatTopicId int `description:"主题id"`
  58. Ask string `description:"提问"`
  59. Model string `description:"模型"`
  60. }
  61. func GetAiChatByAsk(askUuid string) (item *AiChat, err error) {
  62. //sql := `SELECT * FROM ai_chat WHERE ask_uuid=?`
  63. //o := orm.NewOrmUsingDB("ai")
  64. //err = o.Raw(sql, askUuid).QueryRow(&item)
  65. sql := `SELECT * FROM ai_chat WHERE ask_uuid=?`
  66. err = global.DmSQL["ai"].Raw(sql, askUuid).First(&item).Error
  67. return
  68. }
  69. type ChatResp struct {
  70. AiChatTopicId int `description:"主题id"`
  71. Ask string `description:"提问"`
  72. Answer string `description:"回答"`
  73. Model string
  74. }
  75. // AddAiChatTopic 新增主题
  76. func AddAiChatTopic(item *AiChatTopic) (lastId int64, err error) {
  77. //o := orm.NewOrmUsingDB("ai")
  78. //lastId, err = o.Insert(item)
  79. err = global.DmSQL["ai"].Create(item).Error
  80. lastId = int64(item.AiChatTopicId)
  81. return
  82. }
  83. // AddAiChat 新增聊天
  84. func AddAiChat(item *AiChat) (lastId int64, err error) {
  85. //o := orm.NewOrmUsingDB("ai")
  86. //lastId, err = o.Insert(item)
  87. err = global.DmSQL["ai"].Create(item).Error
  88. lastId = int64(item.AiChatId)
  89. return
  90. }
  91. //type AiChatTopicView struct {
  92. // AiChatTopicId int `description:"主题id"`
  93. // TopicName string `description:"主题名称"`
  94. // CreateTime string `description:"创建时间"`
  95. // ModifyTime string `description:"修改时间"`
  96. // AssistantId string
  97. // ThreadId string
  98. //}
  99. type AiChatTopicView struct {
  100. AiChatTopicId int `gorm:"primaryKey;column:ai_chat_topic_id;type:int(11);not null"`
  101. TopicName string `gorm:"column:topic_name;type:varchar(255);default:''"` // 话题名称
  102. //SysUserId int `gorm:"column:sys_user_id;type:int(11);default:0"` // 创建人id
  103. //SysUserRealName string `gorm:"column:sys_user_real_name;type:varchar(100);default:''"` // 创建人姓名
  104. CreateTime *global.LocalTime `gorm:"column:create_time;type:datetime"` // 创建时间
  105. ModifyTime *global.LocalTime `gorm:"column:modify_time;type:datetime"` // 修改时间
  106. AssistantId string `gorm:"column:assistant_id;type:varchar(255);default:''"` // 助手id
  107. ThreadId string `gorm:"column:thread_id;type:varchar(255);default:''"` // 进程id
  108. }
  109. func GetAiChatTopicList(sysUserId int) (item []*AiChatTopicView, err error) {
  110. //sql := ` SELECT * FROM ai_chat_topic WHERE sys_user_id=? ORDER BY create_time DESC `
  111. //o := orm.NewOrmUsingDB("ai")
  112. //_, err = o.Raw(sql, sysUserId).QueryRows(&item)
  113. sql := ` SELECT * FROM ai_chat_topic WHERE sys_user_id=? ORDER BY create_time DESC `
  114. err = global.DmSQL["ai"].Raw(sql, sysUserId).Find(&item).Error
  115. return
  116. }
  117. type AiChatTopicListResp struct {
  118. List []*AiChatTopicView
  119. }
  120. //type AiChatView struct {
  121. // AiChatId int `description:"记录id"`
  122. // AiChatTopicId int `description:"主题id"`
  123. // Ask string `description:"提问"`
  124. // Answer string `description:"答案"`
  125. // Model string
  126. // OpenaiFileId string `description:"文件ID"`
  127. // OpenaiFileName string `description:"文件名称"`
  128. // OpenaiFilePath string `description:"文件路径"`
  129. // CreateTime string `description:"创建时间"`
  130. // ModifyTime string `description:"修改时间"`
  131. //}
  132. type AiChatView struct {
  133. AiChatId int `gorm:"primaryKey;column:ai_chat_id;type:int(11);not null"`
  134. AiChatTopicId int `gorm:"column:ai_chat_topic_id;type:int(11);default:0"`
  135. Ask string `gorm:"column:ask;type:text"` // 提问
  136. //AskUuid string `gorm:"index:idx_ask_uuid;column:ask_uuid;type:varchar(50);default:''"` // ask,md5值
  137. Answer string `gorm:"column:answer;type:text"` // 答案
  138. //SysUserId int `gorm:"column:sys_user_id;type:int(11);default:0"` // 提问人id
  139. //SysUserRealName string `gorm:"column:sys_user_real_name;type:varchar(100);default:''"` // 提问人名称
  140. Model string `gorm:"column:model;type:varchar(20);default:''"` // 模型
  141. CreateTime string `gorm:"column:create_time;type:datetime"`
  142. ModifyTime string `gorm:"column:modify_time;type:datetime"`
  143. OpenaiFileId string `gorm:"column:openai_file_id;type:varchar(255);default:''"` // openai返回的文件id
  144. OpenaiFileName string `gorm:"column:openai_file_name;type:varchar(255);default:''"` // 文件名称
  145. OpenaiFilePath string `gorm:"column:openai_file_path;type:varchar(255);default:''"` // 文件路径
  146. }
  147. var ModelViewMap = map[string]string{
  148. "gpt-4-1106-preview": "GPT-4 Turbo",
  149. "moonshot-v1-32k": "Kimi",
  150. // "moonshot-v1-8k": "Kimi",
  151. }
  152. func GetAiChatList(aiChatTopicId int) (item []*AiChatView, err error) {
  153. //sql := ` SELECT * FROM ai_chat WHERE ai_chat_topic_id=? ORDER BY create_time ASC `
  154. //o := orm.NewOrmUsingDB("ai")
  155. //_, err = o.Raw(sql, aiChatTopicId).QueryRows(&item)
  156. sql := ` SELECT * FROM ai_chat WHERE ai_chat_topic_id=? ORDER BY create_time ASC `
  157. err = global.DmSQL["ai"].Raw(sql, aiChatTopicId).Find(&item).Error
  158. return
  159. }
  160. type AiChatDetailResp struct {
  161. List []*AiChatView
  162. }
  163. type TopicDeleteReq struct {
  164. AiChatTopicId int `description:"主题id"`
  165. }
  166. func DeleteTopic(topicId int) (err error) {
  167. //o := orm.NewOrmUsingDB("ai")
  168. //tx, err := o.Begin()
  169. //defer func() {
  170. // if err != nil {
  171. // tx.Rollback()
  172. // } else {
  173. // tx.Commit()
  174. // }
  175. //}()
  176. //sql := ` DELETE FROM ai_chat_topic WHERE ai_chat_topic_id=? `
  177. //_, err = tx.Raw(sql, topicId).Exec()
  178. //if err != nil {
  179. // return err
  180. //}
  181. //sql = ` DELETE FROM ai_chat WHERE ai_chat_topic_id=? `
  182. //_, err = tx.Raw(sql, topicId).Exec()
  183. //if err != nil {
  184. // return err
  185. //}
  186. tx := global.DmSQL["ai"].Begin()
  187. defer func() {
  188. if err != nil {
  189. tx.Rollback()
  190. } else {
  191. tx.Commit()
  192. }
  193. }()
  194. sql := ` DELETE FROM ai_chat_topic WHERE ai_chat_topic_id=? `
  195. err = tx.Exec(sql, topicId).Error
  196. if err != nil {
  197. return
  198. }
  199. sql = ` DELETE FROM ai_chat WHERE ai_chat_topic_id=? `
  200. err = tx.Exec(sql, topicId).Error
  201. if err != nil {
  202. return
  203. }
  204. return
  205. }
  206. type TopicEditReq struct {
  207. AiChatTopicId int `description:"主题id"`
  208. TopicName string `description:"主题名称"`
  209. }
  210. func GetAiChatTopicByTopicName(topicName string) (item *AiChatTopicView, err error) {
  211. //sql := ` SELECT * FROM ai_chat_topic WHERE topic_name=? `
  212. //o := orm.NewOrmUsingDB("ai")
  213. //err = o.Raw(sql, topicName).QueryRow(&item)
  214. sql := ` SELECT * FROM ai_chat_topic WHERE topic_name=? `
  215. err = global.DmSQL["ai"].Raw(sql, topicName).First(&item).Error
  216. return
  217. }
  218. func EditTopic(topicId int, topicName string) (err error) {
  219. //o := orm.NewOrmUsingDB("ai")
  220. //sql := ` UPDATE ai_chat_topic SET topic_name=? WHERE ai_chat_topic_id=? `
  221. //_, err = o.Raw(sql, topicName, topicId).Exec()
  222. sql := ` UPDATE ai_chat_topic SET topic_name=? WHERE ai_chat_topic_id=? `
  223. err = global.DmSQL["ai"].Exec(sql, topicName, topicId).Error
  224. return
  225. }
  226. func (obj *AiChatTopic) GetAiChatTopicById() (item *AiChatTopicView, err error) {
  227. //o := orm.NewOrmUsingDB("ai")
  228. //sql := ` SELECT * FROM ai_chat_topic WHERE ai_chat_topic_id=? `
  229. //err = o.Raw(sql, obj.AiChatTopicId).QueryRow(&item)
  230. sql := ` SELECT * FROM ai_chat_topic WHERE ai_chat_topic_id=? `
  231. err = global.DmSQL["ai"].Raw(sql, obj.AiChatTopicId).Find(&item).Error
  232. return
  233. }
  234. type HistoryChat struct {
  235. Ask string
  236. Answer string
  237. OpenaiFileId []string `description:"文件ID"`
  238. }
  239. // 修改
  240. //func (obj *AiChatTopic) Update(updateParams, whereParam map[string]interface{}) (err error) {
  241. // to := orm.NewOrmUsingDB("ai")
  242. // ptrStructOrTableName := "ai_chat_topic"
  243. //
  244. // qs := to.QueryTable(ptrStructOrTableName)
  245. // for expr, exprV := range whereParam {
  246. // qs = qs.Filter(expr, exprV)
  247. // }
  248. // _, err = qs.Update(updateParams)
  249. // return
  250. //}
  251. func (obj *AiChatTopic) UpdateAssistantAndThreadId(assistantId, threadId string, topicId int) (err error) {
  252. //updateParams := make(map[string]interface{})
  253. //updateParams["assistant_id"] = assistantId
  254. //updateParams["thread_id"] = threadId
  255. //updateParams["modify_time"] = time.Now()
  256. //
  257. //whereParam := make(map[string]interface{})
  258. //whereParam["ai_chat_topic_id"] = req.AiChatTopicId
  259. sql := `UPDATE ai_chat_topic SET assistant_id = ?, thread_id = ?, modify_time = NOW() WHERE ai_chat_topic_id = ?`
  260. err = global.DmSQL["ai"].Exec(sql, assistantId, threadId, topicId).Error
  261. return
  262. }