from abc import ABC, abstractmethod from typing import List, Tuple from app.models.schemas import SubReview class BaseAgent(ABC): """Abstract base class for all review agents.""" name: str = "Base Agent" @abstractmethod async def analyze(self, images: List[Tuple[bytes, str]]) -> SubReview: """ Analyze the proof and return a SubReview. Args: images: List of (file_data, mime_type) tuples representing the proof. For single images/videos, this will contain one tuple. For multi-page PDFs, this will contain one tuple per page. Returns: SubReview containing ragStatus, feedback, and issues """ pass