"""Domain models for intelligent evaluation (智能评估). Intelligent evaluation is an independent evaluation paradigm parallel to static evaluation (v0.8). OpenClaw drives planning and execution; the platform provides data storage, lifecycle management, and reporting. """ from datetime import datetime from enum import Enum from typing import Any, Optional from pydantic import BaseModel, Field class IntelligentEvalStatus(str, Enum): DRAFT = "draft" PLANNING = "planning" PENDING_APPROVAL = "pending_approval" EXECUTING = "executing" COMPLETED = "completed" CANCELLED = "cancelled" FAILED = "failed" DELETED = "deleted" class IntelligentEvalSessionStatus(str, Enum): RUNNING = "running" COMPLETED = "completed" FAILED = "failed" EXPIRED = "expired" class IntelligentEvalMessage(BaseModel): """One chat message inside an intelligent eval session.""" id: Optional[str] = None session_id: str role: str = "user" content: str = "" latency_ms: Optional[int] = None created_at: Optional[datetime] = None class IntelligentEvalSession(BaseModel): """A virtual-user session belonging to one intelligent evaluation.""" id: Optional[str] = None eval_id: str target_id: str persona: dict[str, Any] = Field(default_factory=dict) goal: str = "" dimension: Optional[str] = None status: IntelligentEvalSessionStatus = IntelligentEvalSessionStatus.RUNNING verdict: Optional[dict[str, Any]] = None turn_count: int = 0 created_at: Optional[datetime] = None closed_at: Optional[datetime] = None class IntelligentEval(BaseModel): """An intelligent evaluation instance — independent entity, peer to Campaign.""" id: Optional[str] = None name: str target_id: str status: IntelligentEvalStatus = IntelligentEvalStatus.DRAFT # User input (四件套) goal: str = "" seeds: dict[str, Any] = Field(default_factory=dict) intent: str = "" role_description: str = "" # Coarse plan (OpenClaw produces) plan: Optional[dict[str, Any]] = None plan_feedback: Optional[str] = None # Time window time_window_hours: int = 24 # Report report: Optional[dict[str, Any]] = None # Timestamps created_at: Optional[datetime] = None updated_at: Optional[datetime] = None started_at: Optional[datetime] = None completed_at: Optional[datetime] = None