message.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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: Optional[list] = 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. class Message(MessageBase, TimeStampMixin, PrimaryKeyMixin, table=True):
  17. pass
  18. class MessageCreate(BaseModel):
  19. role: str = Field(sa_column=Column(Enum("assistant", "user"), nullable=False))
  20. content: Union[str, List[dict]] = Field(nullable=False)
  21. file_ids: Optional[list] = Field(default=None)
  22. attachments: Optional[list] = Field(default=None, sa_column=Column(JSON)) # 附件
  23. metadata_: Optional[dict] = Field(default=None, schema_extra={"validation_alias": "metadata"})
  24. class MessageUpdate(BaseModel):
  25. content: Optional[str] = Field(default=None)
  26. metadata_: Optional[dict] = Field(default=None, schema_extra={"validation_alias": "metadata"})
  27. class MessageRead(MessageBase, TimeStampMixin, PrimaryKeyMixin):
  28. metadata_: Optional[dict] = PDField(default=None, alias="metadata")