from pydantic import BaseModel, Field from typing import List, Optional, Dict, Any # --- 通用响应 --- class ResponseBase(BaseModel): code: int = Field(..., description="1: 成功, 0: 失败") msg: str data: Optional[Any] = None # --- [POST] 创建任务 --- class TaskCreateRequest(BaseModel): url: str = Field(..., description="目标网站根URL", example="https://docs.firecrawl.dev") # --- [POST] 执行任务 --- class TaskExecuteRequest(BaseModel): batch_size: int = Field(10, ge=1, le=50, description="并发线程数/批次大小") # --- [GET] 监控数据 --- class TaskStatusData(BaseModel): root_url: str stats: Dict[str, int] = Field(..., description="数据库统计: pending/processing/completed") active_threads: List[str] = Field(..., description="内存实时: 当前正在爬取的URL列表") active_thread_count: int # --- [POST] 搜索 --- class SearchRequest(BaseModel): query: str task_id: Optional[int] = None return_num: int = Field(5, description="返回结果数量") class SearchResultItem(BaseModel): task_id: int source_url: str title: Optional[str] = None content: str score: float meta_info: Dict = {} reranked: Optional[bool] = False