assistant.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from typing import Optional, Union
  2. from pydantic import Field as PDField
  3. from sqlalchemy import Column
  4. from sqlmodel import Field, JSON, TEXT
  5. from app.models.base_model import BaseModel, TimeStampMixin, PrimaryKeyMixin
  6. class AssistantBase(BaseModel):
  7. model: str = Field(nullable=False)
  8. description: Optional[str] = Field(default=None)
  9. file_ids: Optional[list] = Field(default=None, sa_column=Column(JSON))
  10. instructions: Optional[str] = Field(
  11. default=None, max_length=32768, sa_column=Column(TEXT)
  12. )
  13. metadata_: Optional[dict] = Field(
  14. default=None,
  15. sa_column=Column("metadata", JSON),
  16. schema_extra={"validation_alias": "metadata"},
  17. )
  18. name: Optional[str] = Field(default=None)
  19. tools: Optional[list] = Field(default=None, sa_column=Column(JSON))
  20. extra_body: Optional[dict] = Field(default={}, sa_column=Column(JSON))
  21. response_format: Optional[Union[str, dict]] = Field(
  22. default="auto", sa_column=Column(JSON)
  23. ) # 响应格式
  24. tool_resources: Optional[dict] = Field(
  25. default=None, sa_column=Column(JSON)
  26. ) # 工具资源
  27. temperature: Optional[float] = Field(default=None) # 温度
  28. top_p: Optional[float] = Field(default=None) # top_p
  29. object: str = Field(nullable=False, default="assistant")
  30. class Assistant(AssistantBase, PrimaryKeyMixin, TimeStampMixin, table=True):
  31. pass
  32. class AssistantCreate(AssistantBase):
  33. pass
  34. class AssistantUpdate(BaseModel):
  35. model: Optional[str] = Field(default=None)
  36. description: Optional[str] = Field(default=None)
  37. file_ids: Optional[list] = Field(default=None, sa_column=Column(JSON))
  38. instructions: Optional[str] = Field(
  39. default=None, max_length=32768, sa_column=Column(TEXT)
  40. )
  41. metadata_: Optional[dict] = Field(
  42. default=None, schema_extra={"validation_alias": "metadata"}
  43. )
  44. name: Optional[str] = Field(default=None)
  45. tools: Optional[list] = Field(default=None, sa_column=Column(JSON))
  46. extra_body: Optional[dict] = Field(default={}, sa_column=Column(JSON))
  47. response_format: Optional[Union[str, dict]] = Field(
  48. default="auto", sa_column=Column(JSON)
  49. ) # 响应格式
  50. tool_resources: Optional[dict] = Field(
  51. default=None, sa_column=Column(JSON)
  52. ) # 工具资源
  53. temperature: Optional[float] = Field(default=None) # 温度
  54. top_p: Optional[float] = Field(default=None) # top_p
  55. class AssistantRead(AssistantBase, PrimaryKeyMixin, TimeStampMixin):
  56. metadata_: Optional[dict] = PDField(default=None, alias="metadata")