1
0

task.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. """
  2. 任务模型
  3. """
  4. from datetime import datetime
  5. from typing import Optional, Dict, Any, List
  6. from pydantic import BaseModel, Field
  7. from sqlalchemy import Column, Integer, String, DateTime, Text, Boolean, JSON
  8. from sqlalchemy.ext.declarative import declarative_base
  9. Base = declarative_base()
  10. class TaskDB(Base):
  11. """任务数据库模型"""
  12. __tablename__ = "tasks"
  13. id = Column(Integer, primary_key=True, index=True)
  14. title = Column(String(200), nullable=False)
  15. description = Column(Text)
  16. task_type = Column(String(50), nullable=False) # literature_search, analysis, writing
  17. status = Column(String(20), default="pending") # pending, running, completed, failed
  18. priority = Column(String(10), default="medium") # low, medium, high
  19. parameters = Column(JSON) # 任务参数
  20. results = Column(JSON) # 任务结果
  21. error_message = Column(Text)
  22. progress = Column(Integer, default=0) # 0-100
  23. user_id = Column(Integer, index=True)
  24. created_at = Column(DateTime, default=datetime.utcnow)
  25. updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
  26. completed_at = Column(DateTime)
  27. class Task(BaseModel):
  28. """任务响应模型"""
  29. id: int
  30. title: str
  31. description: Optional[str] = None
  32. task_type: str
  33. status: str
  34. priority: str
  35. progress: int = 0
  36. results: Optional[Dict[str, Any]] = None
  37. error_message: Optional[str] = None
  38. created_at: datetime
  39. updated_at: datetime
  40. completed_at: Optional[datetime] = None
  41. class Config:
  42. from_attributes = True
  43. class TaskCreate(BaseModel):
  44. """任务创建模型"""
  45. title: str = Field(..., min_length=1, max_length=200)
  46. description: Optional[str] = None
  47. task_type: str = Field(..., regex=r'^(literature_search|analysis|writing)$')
  48. priority: str = Field(default="medium", regex=r'^(low|medium|high)$')
  49. parameters: Dict[str, Any] = {}
  50. class TaskUpdate(BaseModel):
  51. """任务更新模型"""
  52. title: Optional[str] = None
  53. description: Optional[str] = None
  54. status: Optional[str] = None
  55. priority: Optional[str] = None
  56. progress: Optional[int] = Field(None, ge=0, le=100)
  57. results: Optional[Dict[str, Any]] = None
  58. error_message: Optional[str] = None
  59. class LiteratureSearchTask(BaseModel):
  60. """文献搜索任务参数"""
  61. query: str
  62. max_papers: int = 20
  63. year_range: Optional[tuple] = None
  64. venues: List[str] = []
  65. quality_threshold: float = 0.5
  66. class AnalysisTask(BaseModel):
  67. """分析任务参数"""
  68. paper_ids: List[int]
  69. analysis_type: str = "comprehensive" # comprehensive, methodology, findings
  70. focus_areas: List[str] = []
  71. class WritingTask(BaseModel):
  72. """写作任务参数"""
  73. paper_ids: List[int]
  74. writing_type: str = "review" # review, summary, critique
  75. outline: Optional[List[str]] = None
  76. style: str = "academic"
  77. length: int = 1000