File size: 1,356 Bytes
9e2986a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from typing import List, Literal
from pydantic import BaseModel

class EmailAction(BaseModel):
    action_type: Literal['send', 'reply', 'archive', 'delete']
    message: str = ""
    email_id: int = None

class EmailEnv:
    def __init__(self):
        self.reset()

    def reset(self):
        self.emails = [
            {"id": 1, "from": "alice@example.com", "subject": "Meeting Tomorrow", "label": "Work", "status": "Unread"},
            {"id": 2, "from": "bob@example.com", "subject": "Lunch Plans", "label": "Personal", "status": "Archived"},
        ]
        return {"emails": self.emails}

    def step(self, action: dict):
        if action["action_type"] == "send":
            new_id = len(self.emails) + 1
            self.emails.append({
                "id": new_id,
                "from": "me@example.com",
                "subject": "New Mail",
                "label": "Work",
                "status": "Sent"
            })
            return {"emails": self.emails, "reward": 1, "done": False}
        return {"emails": self.emails, "reward": 0, "done": False}

env = EmailEnv()
obs = None

def reset():
    global obs
    obs = env.reset()
    return obs

def step(action):
    global obs
    result = env.step(action)
    obs = result["emails"]
    return result

def act():
    return {"action_type": "send", "message": "Hello"}