diff --git a/litellm/proxy/lens/models.py b/litellm/proxy/lens/models.py index de39dd9de74..40509587d91 100644 --- a/litellm/proxy/lens/models.py +++ b/litellm/proxy/lens/models.py @@ -204,6 +204,37 @@ class Step(Record): cost: float = 0 +MAX_REVIEWS = 60 + + +class ReviewSpan(Record): + span_id: str + name: str = Field(max_length=120) + kind: str = Field(max_length=40) + preview: str = Field(max_length=240) + cited: bool = False + + +class ReviewVerdict(Record): + check_id: str + kind: Literal["issue", "pattern"] + summary: str = Field(max_length=300) + + +class Review(Record): + execution_id: str + trace_id: str + agent: str + name: str + spans: tuple[ReviewSpan, ...] = Field(default=(), max_length=8) + reasoning: str = Field(default="", max_length=800) + verdicts: tuple[ReviewVerdict, ...] = () + cannot_assess: bool = False + model: str + duration_ms: int = Field(ge=0) + at: datetime + + class Job(Record): id: str status: Literal["queued", "running", "completed", "failed", "cancelled"] = "queued" @@ -224,6 +255,8 @@ class Job(Record): findings: tuple[Finding, ...] | None = None assessments: tuple[RunAssessment, ...] = () steps: tuple[Step, ...] = () + reviews: tuple[Review, ...] = () + reviewed: int = 0 trigger: Literal["schedule", "manual"] = "schedule" @@ -303,6 +336,7 @@ class Claim(Record): class Progress(Record): stage: str = Field() coverage: Coverage = Coverage() + review: Review | None = None class Result(Record):