Siddhesh Patil
Initial commit - Self-Correcting Data Validation Agent
b67668b
from __future__ import annotations
from datetime import date
from typing import List, Optional, Literal
from pydantic import BaseModel, Field, field_validator
Department = Literal[
"Artificial Intelligence",
"AI/ML",
"Machine Learning",
"Data Science",
]
class Employee(BaseModel):
user_id: int
name: str = Field(min_length=1)
age: Optional[int] = Field(default=None, ge=16, le=80)
email: Optional[str] = None
salary: Optional[float] = Field(default=None, ge=0)
join_date: Optional[date] = None
department: Department
performance_score: Optional[float] = Field(default=None, ge=0, le=10)
location: Optional[str] = None
job_title: Optional[str] = None
@field_validator("name")
@classmethod
def normalize_name(cls, v: str) -> str:
v = " ".join(str(v).strip().split())
return v.title()
class RejectedRecord(BaseModel):
raw_record: str = Field(min_length=1)
reasons: List[str] = Field(min_length=1)
class ExtractedData(BaseModel):
# Valid, schema-compliant records only
employees: List[Employee] = Field(default_factory=list)
# Records that cannot be made valid WITHOUT guessing required fields
rejected: List[RejectedRecord] = Field(default_factory=list)