feat: 统一自动化任务调度配置并增强聊天流恢复
This commit is contained in:
@@ -5,7 +5,7 @@ from enum import Enum
|
||||
from uuid import UUID
|
||||
|
||||
from core.agentscope.tools.tool_config import AgentTool
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
||||
|
||||
from models.automation_jobs import AutomationJob as OrmAutomationJob
|
||||
from models.automation_jobs import AutomationJobStatus, ScheduleType
|
||||
@@ -40,6 +40,21 @@ class ScheduleConfig(BaseModel):
|
||||
|
||||
type: ScheduleType
|
||||
run_at: ScheduleRunAt
|
||||
weekdays: list[int] | None = None
|
||||
|
||||
@model_validator(mode="after")
|
||||
def validate_weekdays(self) -> "ScheduleConfig":
|
||||
if self.type == ScheduleType.WEEKLY:
|
||||
if not self.weekdays:
|
||||
raise ValueError("weekdays is required when schedule type is weekly")
|
||||
invalid = [day for day in self.weekdays if day < 1 or day > 7]
|
||||
if invalid:
|
||||
raise ValueError("weekdays must be within 1-7")
|
||||
deduped = sorted(set(self.weekdays))
|
||||
self.weekdays = deduped
|
||||
else:
|
||||
self.weekdays = None
|
||||
return self
|
||||
|
||||
|
||||
class RuntimeConfig(BaseModel):
|
||||
@@ -66,8 +81,6 @@ class AutomationJob(BaseModel):
|
||||
bootstrap_key: str | None = Field(default=None, min_length=1, max_length=64)
|
||||
title: str = Field(..., min_length=1, max_length=255)
|
||||
config: AutomationJobConfig
|
||||
schedule_type: ScheduleType
|
||||
run_at: datetime
|
||||
next_run_at: datetime
|
||||
timezone: str = Field(default="UTC", min_length=1, max_length=50)
|
||||
last_run_at: datetime | None = None
|
||||
@@ -84,8 +97,6 @@ class AutomationJob(BaseModel):
|
||||
bootstrap_key=obj.bootstrap_key,
|
||||
title=obj.title,
|
||||
config=AutomationJobConfig.model_validate(obj.config or {}),
|
||||
schedule_type=obj.schedule_type,
|
||||
run_at=obj.run_at,
|
||||
next_run_at=obj.next_run_at,
|
||||
timezone=obj.timezone,
|
||||
last_run_at=obj.last_run_at,
|
||||
|
||||
Reference in New Issue
Block a user