group_model.py 5.1 KB

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