message.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from typing import Optional, Union, List
  2. from pydantic import Field as PDField
  3. from sqlalchemy import Column, Enum
  4. from sqlmodel import Field, JSON
  5. from app.models.base_model import BaseModel, TimeStampMixin, PrimaryKeyMixin
  6. class MessageBase(BaseModel):
  7. role: str = Field(sa_column=Column(Enum("assistant", "user", "system", "function", "tool"), nullable=False))
  8. thread_id: str = Field(nullable=False)
  9. object: str = Field(nullable=False, default="thread.message")
  10. content: Union[str, List[dict]] = Field(default=None, sa_column=Column(JSON))
  11. file_ids: Optional[list] = Field(default=None, sa_column=Column(JSON))
  12. attachments: Optional[list] = Field(default=None, sa_column=Column(JSON)) # 附件
  13. metadata_: Optional[dict] = Field(default=None, sa_column=Column("metadata", JSON), schema_extra={"validation_alias": "metadata"})
  14. assistant_id: Optional[str] = Field(default=None)
  15. run_id: Optional[str] = Field(default=None)
  16. reasoning_content: Union[str, List[dict]] = Field(default=None, sa_column=Column(JSON))
  17. class Message(MessageBase, TimeStampMixin, PrimaryKeyMixin, table=True):
  18. pass
  19. class MessageCreate(BaseModel):
  20. role: str = Field(sa_column=Column(Enum("assistant", "user"), nullable=False))
  21. content: Union[str, List[dict]] = Field(nullable=False)
  22. file_ids: Optional[list] = Field(default=None)
  23. attachments: Optional[list] = Field(default=None, sa_column=Column(JSON)) # 附件
  24. metadata_: Optional[dict] = Field(default=None, schema_extra={"validation_alias": "metadata"})
  25. reasoning_content: Optional[Union[str, List[dict]]] = None
  26. class MessageUpdate(BaseModel):
  27. content: Union[str, List[dict]] = Field(default=None)
  28. reasoning_content: Optional[Union[str, List[dict]]] = None
  29. metadata_: Optional[dict] = Field(default=None, schema_extra={"validation_alias": "metadata"})
  30. class MessageRead(MessageBase, TimeStampMixin, PrimaryKeyMixin):
  31. metadata_: Optional[dict] = PDField(default=None, alias="metadata")