openenv_jayesh / README.md
jayesh20's picture
Upload folder using huggingface_hub
4a810e9 verified
|
Raw
History Blame
8.86 kB
---
title: OpenEnv Jayesh - Smart Personal Task Manager
colorFrom: indigo
colorTo: purple
sdk: docker
pinned: false
app_port: 8000
tags:
- openenv
- task-manager
- ai-agent
- planning
base_path: /web
---
# Smart Personal Task Manager - OpenEnv Jayesh
> An AI agent environment for managing tasks with priorities, deadlines, and dependencies -- built for the **OpenEnv Hackathon Round 1**.
- HF Space: https://huggingface.co/spaces/jayesh20/openenv_jayesh
- Python 3.10+
---
## What is this?
A **real-world Task Manager environment** where an AI agent must add, prioritize, and complete tasks while respecting deadlines and dependency constraints. The environment cycles through three meaningfully distinct difficulty levels -- each demanding progressively more sophisticated planning.
This environment targets real-world utility: the kind of task scheduling problems that users, productivity apps, and organizational tools deal with every day.
---
## Difficulty Levels
| Level | Goal | Key Constraints |
|-------|------|-----------------|
| **Easy** | Add 2-3 tasks, then `list` them | None -- basic task CRUD |
| **Medium** | Add 4 tasks with priorities & deadlines; complete all High-priority before deadline | Deadline enforcement, priority management |
| **Hard** | Add 5 tasks with priorities, deadlines, AND dependencies; complete in valid topological order | Dependency ordering + deadline enforcement + penalty accumulation |
---
## Action Space
```python
TaskManagerAction(
command = "add", # "add" | "complete" | "list"
title = "Fix critical bug", # required for add / complete
priority = "High", # "Low" | "Normal" | "High" (default: "Normal")
deadline = "2026-04-15", # ISO-8601 date (optional; relevant in Medium & Hard)
depends_on= ["Reproduce bug"] # list of prerequisite task titles (Hard only)
)
```
### Commands
| Command | Description |
|---------|-------------|
| `add` | Create a new task. Returns error if title already exists or dependency is unresolved. |
| `complete` | Mark a task as done. Checks deadline & dependency constraints and applies penalties. |
| `list` | Display all current tasks with status, priority, deadline, and dependency info. |
---
## Observation Space
```python
TaskManagerObservation(
success = True, # whether the last action succeeded
message = "Task 'Fix bug' added", # status message or error description
tasks = [...], # full task list snapshot
violations = [...], # list of rule violations this episode
reward = 0.45, # cumulative partial reward (0.0-1.0)
done = False, # True when episode goal is achieved
metadata = {
"difficulty": "Hard",
"step": 7,
"tasks_added": 5,
"tasks_completed": 3,
"deadline_misses": 0,
"dependency_violations": 0
}
)
```
### Task Object Fields
| Field | Type | Description |
|-------|------|-------------|
| `title` | str | Task name |
| `priority` | str | `"Low"` / `"Normal"` / `"High"` |
| `deadline` | str | ISO-8601 date or `"none"` |
| `depends_on` | list[str] | Prerequisite task titles |
| `completed` | bool | Whether the task is done |
| `deadline_missed` | bool | True if completed after deadline |
| `dependency_violation` | bool | True if completed before all prerequisites |
---
## Reward Function
### Easy Mode
| Event | Reward |
|-------|--------|
| Each task added (up to 3) | +0.15 |
| Calling `list` | +0.20 |
| **Goal: >=2 tasks added + list called** | **1.0** |
### Medium Mode
| Event | Reward |
|-------|--------|
| Each task added (up to 4) | +0.15 |
| Each task with explicit non-Normal priority | +0.10 |
| Each High-priority task completed **on time** | +0.20 |
| Deadline missed | **-0.25** |
| **Goal: 4 tasks, >=2 High, all High completed on time** | **1.0** |
### Hard Mode
| Event | Reward |
|-------|--------|
| Each task added (up to 5) | +0.15 |
| Each task with non-Normal priority | +0.10 |
| Each task completed without any violation | +0.25 |
| Perfect run bonus (all done, zero violations) | **+0.10** |
| Dependency violation | **-0.30** |
| Deadline missed | **-0.25** |
| **Goal: 5 tasks, >=2 High, all completed, zero violations** | **1.0** |
---
## Quick Start
```bash
# Install dependencies
uv sync
# Start the server
uvicorn server.app:app --host 127.0.0.1 --port 8000
# In another terminal, run the inference demo
python inference.py
```
---
## Usage Examples
### Easy Mode
```python
env = OpenenvJayeshEnvironment()
obs = env.reset() # cycles to Easy
env.step(TaskManagerAction(command="add", title="Buy groceries", priority="Normal"))
# reward: 0.15
env.step(TaskManagerAction(command="add", title="Call dentist", priority="Low"))
# reward: 0.30
obs = env.step(TaskManagerAction(command="list"))
# reward: 1.0, done: True
```
### Medium Mode
```python
obs = env.reset() # cycles to Medium
env.step(TaskManagerAction(command="add", title="Fix critical bug", priority="High", deadline="2026-04-15"))
env.step(TaskManagerAction(command="add", title="Deploy hotfix", priority="High", deadline="2026-04-16"))
env.step(TaskManagerAction(command="add", title="Write release notes", priority="Normal", deadline="2026-04-22"))
env.step(TaskManagerAction(command="add", title="Team prep", priority="Low"))
env.step(TaskManagerAction(command="complete", title="Fix critical bug")) # +0.20 on-time
obs = env.step(TaskManagerAction(command="complete", title="Deploy hotfix")) # +0.20 -> done=True, reward=1.0
```
### Hard Mode (with dependencies)
```python
obs = env.reset() # cycles to Hard
env.step(TaskManagerAction(command="add", title="Reproduce bug", priority="High", deadline="2026-04-15"))
env.step(TaskManagerAction(command="add", title="Write tests", priority="Normal", deadline="2026-04-16"))
env.step(TaskManagerAction(command="add", title="Write fix", priority="High", deadline="2026-04-18",
depends_on=["Reproduce bug"]))
env.step(TaskManagerAction(command="add", title="Code review", priority="Normal", deadline="2026-04-20",
depends_on=["Write fix", "Write tests"]))
env.step(TaskManagerAction(command="add", title="Deploy", priority="Low", deadline="2026-04-22",
depends_on=["Code review"]))
# Complete in valid topological order
env.step(TaskManagerAction(command="complete", title="Reproduce bug")) # no deps
env.step(TaskManagerAction(command="complete", title="Write tests")) # no deps
env.step(TaskManagerAction(command="complete", title="Write fix")) # dep met
env.step(TaskManagerAction(command="complete", title="Code review")) # deps met
obs = env.step(TaskManagerAction(command="complete", title="Deploy")) # done=True, reward=1.0 + bonus
```
---
## Environment Design Rationale
### Why these three levels?
- **Easy** establishes baseline task CRUD competency -- can the agent perform basic operations?
- **Medium** adds time pressure and priority trade-offs -- a realistic proxy for real project management.
- **Hard** requires multi-step planning with constraint satisfaction -- approximates real dependency scheduling (e.g., CI/CD pipelines, project Gantt charts).
### Why partial rewards?
Smooth, dense reward signals (+0.15 per task, +0.10 per priority, etc.) enable reinforcement learning agents to make meaningful progress even without solving the full episode. This is superior to sparse reward environments where only terminal success counts.
### Why penalties?
- Deadline misses (-0.25) discourage agents from completing tasks arbitrarily late.
- Dependency violations (-0.30) teach agents that **order matters** -- a fundamental property of real-world task graphs.
---
## API Endpoints
| URL | Description |
|-----|-------------|
| `GET /health` | Health check |
| `POST /reset` | Start a new episode |
| `POST /step` | Execute an action |
| `GET /state` | Current episode metadata |
| `GET /docs` | Interactive Swagger UI |
---
## Project Structure
```
openenv_jayesh/
+-- Dockerfile
+-- openenv.yaml
+-- pyproject.toml
+-- models.py <- Action + Observation types
+-- client.py <- HTTP client helper
+-- inference.py <- End-to-end demo (all 3 levels)
+-- server/
+-- app.py <- FastAPI app entry point
+-- openenv_jayesh_environment.py <- Core environment logic
```
---
## Deploy
```bash
openenv push --repo-id jayesh20/openenv_jayesh
```
Live space: https://huggingface.co/spaces/jayesh20/openenv_jayesh