All checks were successful
CI / test (push) Successful in 3m24s
Add `deleted` terminal status: completed/cancelled/failed → deleted via
DELETE /api/intelligent-evals/{id} (idempotent, 409 for non-terminal).
Deleted evals are hidden from list, detail, stats, and all sub-resource
endpoints (sessions/report/decision-logs/config-snapshots); child tables
are untouched (audit-safe). Frontend shows a Popconfirm-guarded delete
button for terminal evals only.
89 lines
2.4 KiB
Python
89 lines
2.4 KiB
Python
"""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
|