intention.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. from sqlalchemy import func
  2. from .engine import db
  3. from .types import StringUUID
  4. class IntentionType(db.Model):
  5. __tablename__ = 'intention_types'
  6. __table_args__ = (
  7. db.PrimaryKeyConstraint('id', name='intention_type_id_pkey'),
  8. )
  9. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  10. name = db.Column(db.String(255), nullable=False)
  11. created_by = db.Column(StringUUID, nullable=False)
  12. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  13. updated_by = db.Column(StringUUID, nullable=True)
  14. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  15. @property
  16. def intention_count(self):
  17. return (
  18. db.session.query(func.count(Intention.id))
  19. .filter(Intention.type_id==self.id)
  20. .scalar()
  21. )
  22. @property
  23. def intentions(self):
  24. return (
  25. db.session.query(Intention)
  26. .filter(Intention.type_id == self.id)
  27. .all()
  28. )
  29. class Intention(db.Model):
  30. __tablename__ = "intentions"
  31. __table_args__ = (
  32. db.PrimaryKeyConstraint("id", name="intention_pkey"),
  33. db.Index("intention_type_idx", "type_id"),
  34. )
  35. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  36. type_id = db.Column(StringUUID, nullable=False)
  37. name = db.Column(db.String(255), nullable=False)
  38. created_by = db.Column(StringUUID, nullable=False)
  39. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  40. updated_by = db.Column(StringUUID, nullable=True)
  41. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  42. @property
  43. def type_name(self):
  44. return (
  45. db.session.query(IntentionType.name)
  46. .filter(IntentionType.id==self.type_id)
  47. .first().name
  48. )
  49. @property
  50. def type(self):
  51. return (
  52. db.session.query(IntentionType)
  53. .filter(IntentionType.id==self.type_id)
  54. .first()
  55. )
  56. @property
  57. def corpus(self):
  58. return (
  59. db.session.query(IntentionCorpus)
  60. .filter(IntentionCorpus.intention_id==self.id)
  61. .all()
  62. )
  63. @property
  64. def keywords(self):
  65. return (
  66. db.session.query(IntentionKeyword)
  67. .filter(IntentionKeyword.intention_id==self.id)
  68. .all()
  69. )
  70. @property
  71. def corpus_count(self):
  72. return (
  73. db.session.query(func.count(IntentionCorpus.id))
  74. .filter(IntentionCorpus.intention_id == self.id)
  75. .scalar()
  76. )
  77. @property
  78. def keywords_count(self):
  79. return (
  80. db.session.query(func.count(IntentionKeyword.id))
  81. .filter(IntentionKeyword.intention_id == self.id)
  82. .scalar()
  83. )
  84. class IntentionKeyword(db.Model):
  85. __tablename__ = "intention_keywords"
  86. __table_args__ = (
  87. db.PrimaryKeyConstraint('id', name='intention_keyword_pkey'),
  88. )
  89. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  90. name = db.Column(db.String(255), nullable=False)
  91. intention_id = db.Column(StringUUID, nullable=False)
  92. created_by = db.Column(StringUUID, nullable=False)
  93. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  94. updated_by = db.Column(StringUUID, nullable=True)
  95. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  96. @property
  97. def intention(self):
  98. return (
  99. db.session.query(Intention).filter(Intention.id==self.intention_id).first()
  100. )
  101. class IntentionCorpus(db.Model):
  102. __tablename__ = "intention_corpus"
  103. __table_args__ = (
  104. db.PrimaryKeyConstraint('id', name='intention_corpus_pkey'),
  105. db.Index("intention_corpus_idx", "intention_id"),
  106. )
  107. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  108. question = db.Column(db.String(255), nullable=False)
  109. question_config = db.Column(db.JSON, nullable=False)
  110. intention_id = db.Column(StringUUID, nullable=False)
  111. created_by = db.Column(StringUUID, nullable=False)
  112. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  113. updated_by = db.Column(StringUUID, nullable=True)
  114. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  115. @property
  116. def intention(self):
  117. return (
  118. db.session.query(Intention)
  119. .filter(Intention.id==self.intention_id)
  120. .first()
  121. )
  122. @property
  123. def similarity_questions(self):
  124. return (
  125. db.session.query(IntentionCorpusSimilarityQuestion)
  126. .filter(IntentionCorpusSimilarityQuestion.corpus_id==self.id)
  127. .all()
  128. )
  129. class IntentionCorpusSimilarityQuestion(db.Model):
  130. __tablename__ = "intention_corpus_similarity_questions"
  131. __table_args__ = (
  132. db.PrimaryKeyConstraint('id', name='intention_corpus_similarity_question_pkey'),
  133. db.Index("intention_corpus_similarity_question_idx", "corpus_id"),
  134. )
  135. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  136. question = db.Column(db.String(255), nullable=False)
  137. question_config = db.Column(db.JSON, nullable=False)
  138. corpus_id = db.Column(StringUUID, nullable=False)
  139. created_by = db.Column(StringUUID, nullable=False)
  140. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  141. updated_by = db.Column(StringUUID, nullable=True)
  142. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  143. @property
  144. def corpus(self):
  145. return (
  146. db.session.query(IntentionCorpus)
  147. .filter(IntentionCorpus.id==self.corpus_id)
  148. .first()
  149. )
  150. class IntentionTrainTask(db.Model):
  151. __tablename__ = "intention_train_tasks"
  152. __table_args__ = (
  153. db.PrimaryKeyConstraint('id', name='intention_train_log_pkey'),
  154. )
  155. STATUS_LIST = ["CREATED", "TRAINING", "COMPLETED"]
  156. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  157. name = db.Column(db.String(255), nullable=False)
  158. status = db.Column(db.String(255), nullable=False)
  159. created_by = db.Column(StringUUID, nullable=False)
  160. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  161. @property
  162. def dataset_info(self):
  163. dataset_info = (
  164. db.session.query(IntentionTrainFile)
  165. .join(IntentionTrainFileBinding, IntentionTrainFileBinding.file_id == IntentionTrainFile.id)
  166. .filter(
  167. IntentionTrainFile.type == "DATASET",
  168. IntentionTrainFileBinding.task_id == self.id
  169. )
  170. .first()
  171. )
  172. return dataset_info
  173. @property
  174. def model_info(self):
  175. model_info = (
  176. db.session.query(IntentionTrainFile)
  177. .join(IntentionTrainFileBinding, IntentionTrainFileBinding.file_id == IntentionTrainFile.id)
  178. .filter(
  179. IntentionTrainFile.type == "MODEL",
  180. IntentionTrainFileBinding.task_id == self.id
  181. )
  182. .first()
  183. )
  184. return model_info
  185. class IntentionTrainFile(db.Model):
  186. __tablename__ = "intention_train_files"
  187. __table_args__ = (
  188. db.PrimaryKeyConstraint('id', name='intention_train_file_pkey'),
  189. )
  190. TRAIN_FILE_TYPE_LIST = ["DATASET", "MODEL"]
  191. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  192. name = db.Column(db.String(255), nullable=False)
  193. version = db.Column(db.String(255), nullable=False)
  194. type = db.Column(db.String(255), nullable=False)
  195. data_source_type = db.Column(db.String(255), nullable=False)
  196. data_source_info = db.Column(db.JSON, nullable=False)
  197. created_by = db.Column(StringUUID, nullable=False)
  198. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  199. class IntentionTrainFileBinding(db.Model):
  200. __tablename__ = "intention_train_file_bindings"
  201. __table_args__ = (
  202. db.PrimaryKeyConstraint('id', name='intention_train_file_binding_pkey'),
  203. db.Index("intention_train_file_binding_idx", "file_id"),
  204. db.Index("intention_train_file_binding_task_idx", "task_id"),
  205. )
  206. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  207. file_id = db.Column(StringUUID, nullable=False)
  208. task_id = db.Column(StringUUID, nullable=False)