File size: 4,364 Bytes
1f9fc8c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
from enum import Enum
from typing import Any, Optional
from pydantic import BaseModel, Field


class TaskType(str, Enum):
    """Types of identity verification tasks the environment supports."""
    DOCUMENT_VERIFICATION = "document_verification"
    CREDENTIAL_AUTHENTICATION = "credential_authentication"
    PROFILE_MANAGEMENT = "profile_management"
    FRAUD_DETECTION = "fraud_detection"


class DocumentType(str, Enum):
    """Types of identity documents."""
    PASSPORT = "passport"
    DRIVERS_LICENSE = "drivers_license"
    NATIONAL_ID = "national_id"
    BIRTH_CERTIFICATE = "birth_certificate"


class IdentityDocument(BaseModel):
    """Identity document data for verification."""
    document_type: DocumentType = Field(description="Type of document")
    document_number: str = Field(description="Document identifier number")
    full_name: str = Field(description="Full name as on document")
    date_of_birth: str = Field(description="Date of birth (YYYY-MM-DD)")
    expiry_date: Optional[str] = Field(default=None, description="Document expiry date")
    issuing_country: str = Field(description="Country that issued the document")
    additional_fields: dict[str, Any] = Field(default_factory=dict, description="Additional document data")


class UserCredentials(BaseModel):
    """User credentials for authentication."""
    username: str = Field(description="Username or email")
    password: str = Field(description="Password")
    two_factor_code: Optional[str] = Field(default=None, description="2FA code if enabled")


class UserProfile(BaseModel):
    """User profile information."""
    user_id: str = Field(description="Unique user identifier")
    full_name: str = Field(description="Full name")
    email: str = Field(description="Email address")
    phone: Optional[str] = Field(default=None, description="Phone number")
    date_of_birth: Optional[str] = Field(default=None, description="Date of birth")
    address: Optional[str] = Field(default=None, description="Physical address")
    attributes: dict[str, Any] = Field(default_factory=dict, description="Additional attributes")


class VerificationResult(BaseModel):
    """Result of identity verification."""
    verified: bool = Field(description="Whether verification passed")
    confidence: float = Field(default=0.0, description="Confidence score 0-1")
    issues: list[str] = Field(default_factory=list, description="List of verification issues")
    checks_performed: dict[str, bool] = Field(default_factory=dict, description="Individual check results")


class CoreIdentityObservation(BaseModel):
    """Observation returned by the environment after reset or step."""
    task_id: str = Field(description="Unique identifier for the task")
    task_type: TaskType = Field(description="Type of identity task")
    task_name: str = Field(description="Human-readable name of the task")
    task_description: str = Field(description="Description of what needs to be done")
    difficulty: str = Field(default="medium", description="Difficulty level: easy, medium, hard")
    
    document: Optional[IdentityDocument] = Field(default=None, description="Document to verify")
    credentials: Optional[UserCredentials] = Field(default=None, description="Credentials to authenticate")
    profile: Optional[UserProfile] = Field(default=None, description="User profile to manage")
    
    expected_verification: Optional[bool] = Field(default=None, description="Expected verification result")
    challenge_data: dict[str, Any] = Field(default_factory=dict, description="Additional challenge data")
    max_steps: int = Field(default=10, description="Maximum allowed steps")


class CoreIdentityAction(BaseModel):
    """Action to perform in the environment."""
    verification: VerificationResult = Field(description="The verification result from the agent")
    submit: bool = Field(default=False, description="Whether to submit the final result")


class CoreIdentityReward(BaseModel):
    """Reward components for the environment."""
    accuracy: float = Field(default=0.0, description="Accuracy of verification")
    completeness: float = Field(default=0.0, description="Completeness of checks performed")
    efficiency: float = Field(default=0.0, description="Efficiency bonus for fewer steps")
    total: float = Field(default=0.0, description="Total reward value")