krishuggingface's picture
Upload folder using huggingface_hub
d03f57f verified
"""
PII-Scrub-Assistant-v1 -- Pydantic Models
==========================================
OpenEnv 2026 Sync Protocol schemas.
"""
from __future__ import annotations
from typing import Optional
from pydantic import BaseModel, Field
class ScrubActionPayload(BaseModel):
"""Wrapped-int action payload."""
action_id: int = Field(..., description="Protocol-required int. 1=submit, 0=skip.")
redacted_text: str = Field(..., description="Scrubbed text with PII replaced by [REDACTED].")
class ScrubAction(BaseModel):
"""Top-level wrapped action envelope."""
action: ScrubActionPayload
class ScrubObservation(BaseModel):
"""Returned after reset() or step()."""
task_id: str = Field(..., description="Current task identifier.")
original_text: str = Field(..., description="Raw email to redact.")
instruction: str = Field(..., description="Task instruction.")
score: Optional[float] = Field(None, ge=0.0, le=1.0)
reward: Optional[float] = None
done: bool = False
feedback: Optional[str] = None
class ScrubState(BaseModel):
"""Full environment state snapshot."""
current_task_id: Optional[str] = None
player_id: Optional[str] = None
session_id: Optional[str] = None
step_count: int = 0
done: bool = False
last_score: Optional[float] = None
last_reward: Optional[float] = None
original_text: Optional[str] = None
class ResetRequest(BaseModel):
"""POST /reset body."""
player_id: str = Field(..., description="Agent ID for turn validation.")
session_id: str = Field(..., description="Session token for dedup.")
task_id: Optional[str] = Field(None, description="task_1|task_2|task_3")
class StepRequest(BaseModel):
"""POST /step body."""
player_id: str = Field(..., description="Must match /reset player_id.")
session_id: str = Field(..., description="Must match /reset session_id.")
action: ScrubActionPayload