job_queue.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from datetime import datetime, timezone
  2. from enum import Enum
  3. from pydantic import BaseModel, Field
  4. class JobStatus(str, Enum):
  5. PENDING = "pending"
  6. QUEUED = "queued"
  7. PREPROCESSING = "preprocessing"
  8. TRAINING = "training"
  9. COMPLETED = "completed"
  10. EVALUATING = "evaluating"
  11. EVALUATION_DONE = "evaluation_done"
  12. FAILED = "failed"
  13. CANCELLED = "cancelled"
  14. @property
  15. def is_terminal(self) -> bool:
  16. return self in (self.COMPLETED, self.FAILED, self.CANCELLED, self.EVALUATION_DONE)
  17. class TrainingJob(BaseModel):
  18. id: str
  19. model_id: str
  20. model_type: str
  21. peft_method: str
  22. dataset_id: str
  23. config: dict = Field(default_factory=dict)
  24. status: JobStatus = JobStatus.PENDING
  25. progress: float = 0.0
  26. current_epoch: int = 0
  27. current_step: int = 0
  28. total_steps: int = 0
  29. loss: float | None = None
  30. adapter_path: str | None = None
  31. error_message: str | None = None
  32. created_at: str = Field(default_factory=lambda: datetime.now(timezone.utc).isoformat())
  33. started_at: str | None = None
  34. finished_at: str | None = None