group_model.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. from datetime import datetime
  2. from enum import IntEnum
  3. from typing import Optional
  4. from sqlalchemy import Column, Integer, String, DateTime, Enum, Index, Table, ForeignKey
  5. from pydantic import BaseModel
  6. from sqlalchemy.orm import relationship, backref
  7. from app.config.const import Dialog_STATSU_DELETE
  8. from app.models.base_model import Base
  9. group_knowledge_table = Table('group_knowledge', Base.metadata
  10. , Column('group_id', Integer, ForeignKey('group.id', ondelete='CASCADE'))
  11. , Column('knowledge_id', String(32), ForeignKey('knowledgebases.id', ondelete='CASCADE')))
  12. group_dialog_table = Table('group_dialogs', Base.metadata
  13. , Column('group_id', Integer, ForeignKey('group.id', ondelete='CASCADE'))
  14. , Column('dialog_id', String(36), ForeignKey('dialogs.id', ondelete='CASCADE')))
  15. group_agent_table = Table('group_canvas', Base.metadata
  16. , Column('group_id', Integer, ForeignKey('group.id', ondelete='CASCADE'))
  17. , Column('canvas_id', String(36), ForeignKey('canvas.id', ondelete='CASCADE')))
  18. group_llm_table = Table('group_llm', Base.metadata
  19. , Column('group_id', Integer, ForeignKey('group.id', ondelete='CASCADE'))
  20. , Column('llm_id', String(36), ForeignKey('common_llm.id', ondelete='CASCADE')))
  21. group_unified_agent_table = Table('group_unified_agent', Base.metadata
  22. , Column('group_id', Integer, ForeignKey('group.id', ondelete='CASCADE'))
  23. ,Column('unified_agent_id', String(36), ForeignKey('unified_agent.id', ondelete='CASCADE')))
  24. class GroupModel(Base):
  25. __tablename__ = "group"
  26. id = Column(Integer, primary_key=True, index=True)
  27. group_name = Column(String(255), unique=True, nullable=False, index=True)
  28. group_description = Column(String(255))
  29. status = Column(String(10), nullable=False, default="1")
  30. created_at = Column(DateTime, default=datetime.now())
  31. updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now())
  32. creator = Column(Integer)
  33. group_type = Column(Integer, default=1)
  34. knowledges = relationship('KnowledgeModel',
  35. secondary=group_knowledge_table,
  36. backref=backref('groups', lazy='dynamic'),
  37. lazy="dynamic")
  38. dialogs = relationship('DialogModel',
  39. secondary=group_dialog_table,
  40. backref=backref('groups', lazy='dynamic'),
  41. lazy="dynamic")
  42. agents = relationship('CanvasModel',
  43. secondary=group_agent_table,
  44. backref=backref('groups', lazy='dynamic'))
  45. llms = relationship('CommonLlmModel',
  46. secondary=group_llm_table,
  47. backref=backref('groups', lazy='dynamic'))
  48. unified_agents = relationship('UnifiedAgentModel',
  49. secondary=group_unified_agent_table,
  50. backref=backref('groups', lazy='dynamic'))
  51. def to_dict(self):
  52. return {
  53. 'groupId': self.id,
  54. 'name': self.group_name,
  55. 'description': self.group_description,
  56. 'status': self.status,
  57. 'createTime': self.created_at.strftime("%Y-%m-%d %H:%M:%S")
  58. }
  59. def get_id(self):
  60. return str(self.ID)
  61. def __repr__(self):
  62. return '<Role name:%r description:%r>\n' \
  63. % (self.group_name, self.group_description)
  64. def to_json(self):
  65. json = {
  66. 'groupId': self.id,
  67. 'createTime': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
  68. 'updateTime': self.updated_at.strftime('%Y-%m-%d %H:%M:%S'),
  69. 'groupName': self.group_name,
  70. 'description': self.group_description,
  71. 'status': self.status,
  72. }
  73. # if len(self.knowledges.all()) > 0:
  74. json['knowledges'] = [knowledge.to_json() for knowledge in self.knowledges]
  75. # if len(self.dialogs.all()) > 0:
  76. json['dialogs'] = [dialog.to_json() for dialog in self.dialogs if dialog.status != Dialog_STATSU_DELETE]
  77. # if len(self.agents.all()) > 0:
  78. # json['agents'] = [agent.to_json() for agent in self.agents]
  79. # if len(self.llms.all()) > 0:
  80. json['llms'] = [llm.to_json() for llm in self.llms]
  81. json['users'] = [user.to_dict() for user in self.users]
  82. # if hasattr(self, 'flag'):
  83. # json['flag'] = self.flag
  84. return json
  85. # class UserGroupModel(Base):
  86. # __tablename__ = "user_group"
  87. # id = Column(Integer, primary_key=True)
  88. # group_id = Column(Integer, nullable=False)
  89. # user_id = Column(Integer, nullable=False)
  90. # Index('ix_user_group_id', group_id, user_id, unique=True)
  91. class GroupData(BaseModel):
  92. id: Optional[int] = None
  93. groupName: Optional[str] = ""
  94. description: Optional[str] = ""
  95. status: Optional[str] = ""
  96. class GroupUsers(BaseModel):
  97. id: int
  98. userList: list
  99. class GroupResource(BaseModel):
  100. id: int
  101. llms: list
  102. dialogs: list
  103. knowledges: list