from pydantic import BaseModel from typing import List, Optional, Dict, Any class Candidate(BaseModel): id: str name: str email: Optional[str] = None skills: Optional[str] = None experience: Optional[str] = None projects: Optional[str] = None education: Optional[str] = None resume_text: Optional[str] = None data: Optional[Dict[str, Any]] = None class NormalizedCandidate(BaseModel): candidate_id: str name: str normalized_title: str experience_years: float primary_skills: List[str] secondary_skills: List[str] backend_score: float frontend_score: float cloud_score: float database_score: float notice_period_days: int location: str employment_status: str salary_expectation: str flags: List[str] class RerankResult(BaseModel): candidate_id: str scores: Dict[str, float] final_score: float decision: str class DeepReview(BaseModel): candidate_id: str verdict: str why: str strengths: List[str] risks: List[str] hidden_signal: str confidence: float class FinalRank(BaseModel): rank: int candidate_id: str name: str decision: str reason: str class FinalShortlist(BaseModel): final_ranking: List[FinalRank] class EvaluationRequest(BaseModel): jd: str candidates: List[Candidate] class EvaluationResponse(BaseModel): shortlist: List[FinalRank] details: Dict[str, Any]