File size: 1,474 Bytes
a9411e7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from pydantic import BaseModel, Field
from typing import Optional, Dict, List, Literal


# ACTION MODEL
class Action(BaseModel):
    action_type: Literal[
        "interrogate",
        "analyze_evidence",
        "check_cctv",
        "search_police_records",
        "query_web_information",
        "visit_location",
        "request_additional_data",
        "search_past_cases",
        "conclude_case"
    ]
    target_id: Optional[str] = None
    parameters: Optional[Dict[str, str]] = None


# SUSPECT MODEL
class Suspect(BaseModel):
    id: str
    name: str
    confidence: float = Field(ge=0.0, le=1.0)
    status: Literal["unknown", "suspected", "cleared"]


# OBSERVATION MODEL
class Observation(BaseModel):
    case_id: str
    case_description: str

    initial_facts: List[str]
    discovered_clues: List[str]
    previous_case_history: List[str]

    suspects: List[Suspect]

    available_actions: List[Literal[
        "interrogate",
        "analyze_evidence",
        "check_cctv",
        "search_police_records",
        "query_web_information",
        "visit_location",
        "request_additional_data",
        "search_past_cases",
        "conclude_case"
    ]]

    time_remaining: int
    budget_remaining: int

    steps_taken: int
    max_steps: int

    done: bool = False
    reward: float = 0.0

    metadata: Optional[Dict] = None
    valid_targets: Optional[List[str]] = None