openenv_jayesh / README.md
jayesh20's picture
Upload folder using huggingface_hub
4a810e9 verified
|
Raw
History Blame
8.86 kB
metadata
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.


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

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

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

# 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

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

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)

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

openenv push --repo-id jayesh20/openenv_jayesh

Live space: https://huggingface.co/spaces/jayesh20/openenv_jayesh