Palak6106's picture
Update README.md (#13)
378cd49
|
Raw
History Blame
3.33 kB
---
title: Email Sorting Openenv
emoji: πŸ“§
colorFrom: blue
colorTo: red
sdk: docker
pinned: false
tags:
- openenv
---
# Email Sorting OpenEnv πŸ“§
A real-world OpenEnv environment where an AI agent learns to classify
emails as **spam**, **important**, or **promotion**.
Built for the Meta x PyTorch OpenEnv Hackathon.
---
## What This Project Does
In today's world, people receive hundreds of emails daily.
This environment trains an AI agent to automatically sort emails
by reading the subject, body, and sender β€” just like a smart inbox.
The agent learns:
- Correct classification = **reward**
- Wrong classification = **penalty**
- Harder emails = **higher reward** (to encourage learning)
---
## Environment Details
| Property | Value |
|----------|-------|
| Task Type | Email Classification |
| Action Space | spam / important / promotion |
| Max Steps | 10 per episode |
| Reward Range | -0.5 to +1.0 |
| Difficulty Levels | Easy / Medium / Hard |
---
## Action Space
The agent can take exactly one of these actions per step:
| Action | Meaning |
|--------|---------|
| `spam` | Email is unwanted, scam, or phishing |
| `important` | Email needs attention (work, orders, real alerts) |
| `promotion` | Genuine sale or discount from real shops |
---
## Observation Space
Each step the agent receives:
```json
{
"email": {
"subject": "You won $1,000,000!",
"body": "Click here to claim your prize.",
"sender": "prize@randomsite.xyz"
},
"step": 1,
"max_steps": 10,
"total_reward": 0.0,
"done": false,
"valid_actions": ["spam", "important", "promotion"]
}
```
---
## Tasks
| Task | Difficulty | Description | Expected Score |
|------|------------|-------------|----------------|
| `easy_sorting` | Easy | Classify obvious spam vs important emails | 0.6 – 0.8 |
| `medium_sorting` | Medium | Distinguish spam, promotion, and important | 0.5 – 0.7 |
| `hard_sorting` | Hard | Detect subtle phishing and tricky promotions | 0.4 – 0.6 |
---
## Reward Function
| Event | Reward |
|-------|--------|
| Easy correct | +0.5 |
| Medium correct | +0.75 |
| Hard correct | +1.0 |
| Easy wrong | -0.5 |
| Medium wrong | -0.3 |
| Hard wrong | -0.1 |
| Invalid action | -0.2 |
---
## Baseline Scores
Scores achieved by the rule-based baseline agent (`baseline_agent` in `graders.py`):
| Task | Score |
|------|-------|
| easy_sorting | 0.8 |
| medium_sorting | 0.67 |
| hard_sorting | 0.5 |
| **Average** | **0.657** |
---
## Setup & Usage
### Local
```bash
pip install -r requirements.txt
python server.py # starts server at http://localhost:7860
python graders.py # run graders with baseline agent
python inference.py # run inference loop
```
### Docker
```bash
docker build -t email-sorting-openenv .
docker run -p 7860:7860 email-sorting-openenv
```
### API
```bash
curl -X POST http://localhost:7860/reset
curl -X POST http://localhost:7860/step -H "Content-Type: application/json" -d '{"action":"spam"}'
curl http://localhost:7860/state
curl http://localhost:7860/graders
```
### Environment Variables
| Variable | Description | Default |
|----------|-------------|---------|
| `API_BASE_URL` | LLM API base URL | `https://api.openai.com/v1` |
| `MODEL_NAME` | Model to use | `gpt-4o-mini` |
| `HF_TOKEN` | HuggingFace / API token | β€” |