gdpr / models.py
9059Rohith
Space clean history snapshot for submission
2ef845d
Raw History Blame Contribute Delete
2.18 kB
from __future__ import annotations
from typing import Any, Dict, List, Literal, Optional
from pydantic import BaseModel, Field
class DataRecord(BaseModel):
"""A single data record in the enterprise data lake."""
record_id: str
system: Literal["postgres", "s3", "slack", "email"]
data_type: Literal["PII", "anonymized", "legal_hold", "derived"]
user_id: str
dependencies: List[str] = Field(default_factory=list)
legal_hold: bool
age_days: int
deletion_cost: float
status: Literal["active", "deleted", "anonymized"] = "active"
class EraseRequest(BaseModel):
"""The incoming GDPR erasure request."""
request_id: str
user_id: str
deadline_steps: int
regulation: Literal["GDPR", "CCPA"]
submitted_at_step: int = 0
class EraseOpsObservation(BaseModel):
"""Full observation returned to the agent at every step."""
records: List[DataRecord]
request: EraseRequest
step: int
step_budget: int
cumulative_penalty: float
last_action_result: str
pii_remaining: int
legal_hold_violations: int
dependency_violations: int
contamination_violations: int
requests_completed: int
deadline_pressure: float
escalation_queue_size: int
escalation_queue_max_age: int
blocked_dependency_count: int
blocked_dependency_max_age: int
class EraseOpsAction(BaseModel):
"""Action the agent takes each step."""
action_type: Literal["inspect", "delete", "anonymize", "escalate", "noop"]
record_id: Optional[str] = None
justification: Optional[str] = None
class EraseOpsReward(BaseModel):
"""Decomposed reward for transparency."""
total: float
deletion_reward: float
step_penalty: float
legal_hold_penalty: float
dependency_penalty: float
contamination_penalty: float
over_deletion_penalty: float
completion_bonus: float
class TaskConfig(BaseModel):
"""In-memory deterministic task configuration returned by get_task."""
task_name: str
step_budget: int
request: EraseRequest
records: List[DataRecord]
observation_order: List[str]
metadata: Dict[str, Any] = Field(default_factory=dict)