Spaces:
Running
Running
File size: 1,674 Bytes
9d0fd45 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | """Task and research request models."""
from __future__ import annotations
from datetime import UTC, datetime
from pydantic import BaseModel, Field
from frontier_agent.core.types import TaskId, TaskStatus, new_task_id
class ResearchRequest(BaseModel):
"""User-submitted research question with optional configuration."""
question: str
mode: str = "deep" # quick | deep | heavy_duty
depth: str = "standard" # standard | deep
max_sources: int = 20
language: str = "auto" # auto | en | zh
pipeline_id: str = "auto"
class Task(BaseModel):
"""A research task — the OS 'process' abstraction."""
id: TaskId = Field(default_factory=new_task_id)
thread_id: str = "" # runtime checkpoint/resume thread id
parent_task_id: str | None = None
status: TaskStatus = TaskStatus.CREATED
current_phase: str = ""
pipeline_id: str = "auto"
request: ResearchRequest
created_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
error: str | None = None
context: dict = Field(default_factory=dict)
# Result pointers
report_id: str | None = None
evidence_count: int = 0
assertion_count: int = 0
# Pin / favorite
pinned: bool = False
pinned_at: datetime | None = None
# Title (user-editable; NULL → UI falls back to input_text preview)
title: str | None = None
# Archive (soft delete)
archived: bool = False
archived_at: datetime | None = None
def set_status(self, status: TaskStatus) -> None:
self.status = status
self.updated_at = datetime.now(UTC)
|