__init__.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. from pydantic import BaseModel, ConfigDict, Field
  2. from datetime import datetime
  3. from typing import Optional, List, Any, Union
  4. import json
  5. # Define SystemLog first or import it
  6. from .system_log import SystemLog
  7. class User(BaseModel):
  8. id: int
  9. username: str
  10. password_hash: str
  11. role: str = "user"
  12. created_at: datetime
  13. model_config = ConfigDict(from_attributes=True)
  14. class Persona(BaseModel):
  15. id: int
  16. owner_id: int
  17. name: str
  18. title: Optional[str] = None
  19. bio: Optional[str] = None
  20. theories: Optional[Union[List[str], str]] = []
  21. stance: Optional[str] = None
  22. system_prompt: Optional[str] = None
  23. is_public: bool = False
  24. created_at: datetime
  25. model_config = ConfigDict(from_attributes=True)
  26. class Moderator(BaseModel):
  27. id: int
  28. name: str
  29. title: Optional[str] = "主持人"
  30. bio: Optional[str] = None
  31. system_prompt: Optional[str] = None
  32. greeting_template: Optional[str] = None
  33. closing_template: Optional[str] = None
  34. summary_template: Optional[str] = None
  35. creator_id: int
  36. created_at: datetime
  37. model_config = ConfigDict(from_attributes=True)
  38. class ForumParticipant(BaseModel):
  39. forum_id: int
  40. persona_id: int
  41. thoughts_history: Optional[Union[List[Any], str]] = []
  42. model_config = ConfigDict(from_attributes=True)
  43. class Forum(BaseModel):
  44. id: int
  45. topic: str
  46. creator_id: int
  47. moderator_id: Optional[int] = None
  48. status: str = "active"
  49. summary_history: Optional[Union[List[Any], str]] = []
  50. start_time: Optional[datetime] = None
  51. end_time: Optional[datetime] = None
  52. duration_minutes: int = 30
  53. # Relationships (Optional, populated manually)
  54. participants: Optional[List[Any]] = None
  55. moderator: Optional[Moderator] = None
  56. model_config = ConfigDict(from_attributes=True)
  57. class Message(BaseModel):
  58. id: int
  59. forum_id: int
  60. persona_id: Optional[int] = None
  61. moderator_id: Optional[int] = None
  62. speaker_name: str
  63. content: str
  64. turn_count: int = 0
  65. thought: Optional[str] = None # Renamed from thoughts to thought
  66. timestamp: datetime
  67. model_config = ConfigDict(from_attributes=True)
  68. class Observation(BaseModel):
  69. id: int
  70. user_id: int
  71. forum_id: int
  72. joined_at: datetime
  73. left_at: Optional[datetime] = None
  74. model_config = ConfigDict(from_attributes=True)
  75. class GodLog(BaseModel):
  76. id: int
  77. god_user_id: int
  78. action: str
  79. details: Optional[str] = None
  80. timestamp: datetime
  81. model_config = ConfigDict(from_attributes=True)