trial1 / README.md
priyaaaaaasharmaaaaa's picture
Upload trained LoRA adapter from Kaggle
35e9f20 verified
|
Raw
History Blame Contribute Delete
9.35 kB
---
title: AI Sprint Manager
emoji: 🤖
colorFrom: blue
colorTo: purple
sdk: docker
pinned: false
tags: [openenv, reinforcement-learning, agile, sprint-management, fastapi, gradio]
---
# 🤖 AI Sprint Manager — OpenEnv
> **A reinforcement learning environment where an AI agent acts as a Tech Lead managing agile software sprints.**
---
## 🎯 What Is This?
Modern software teams spend enormous time on sprint planning decisions:
- Which developer gets which task?
- What do you do when someone goes sick mid-sprint?
- How do you handle an urgent production bug that appears on day 5?
This environment simulates these real-world decisions so an AI agent can **learn optimal sprint management strategies** through reinforcement learning.
The agent plays the role of a Tech Lead. Each step it observes the full sprint state (tasks, developers, workloads, deadlines) and takes an action. The environment responds with a reward signal that guides learning.
---
## 🏗️ Architecture
```
┌─────────────────────────────────────────┐
│ RL Agent / LLM / Training Loop │
│ (uses client.py) │
└──────────────────┬──────────────────────┘
│ HTTP reset / step / state
┌─────────────────────────────────────────┐
│ FastAPI Server (port 7860) │
│ /reset /step /state /health │
└──────────────────┬──────────────────────┘
┌─────────────────────────────────────────┐
│ Sprint Environment (core logic) │
│ • Task/developer simulation │
│ • Reward calculation │
│ • Random events (bugs, absences) │
│ • 3 graders: easy / medium / hard │
└──────────────────┬──────────────────────┘
│ data loaded from
┌─────────────────────────────────────────┐
│ data/sprint_data.json │
│ (customizable — bring your own data!) │
└─────────────────────────────────────────┘
```
---
## 🎮 Live Demo
1. Select a sprint scenario (easy / medium / hard)
2. Click **🔄 Reset Sprint**
3. Use the **Skill → Dev Guide** to assign tasks correctly
4. Or click **🤖 Auto-Assign All** to let the system decide
5. Watch the reward history and task status update in real time
---
## 📐 Action Space
| Field | Type | Values |
|---|---|---|
| `action_type` | string | `assign`, `reassign`, `reprioritize`, `unblock`, `skip` |
| `task_id` | string | Task ID e.g. `"T1"`, `"T6"` |
| `dev_id` | string | Developer ID e.g. `"dev1"`, `"dev3"` |
| `new_priority` | int | 1–5 (1=highest, for reprioritize only) |
## 📊 Observation Space
| Field | Type | Description |
|---|---|---|
| `current_day` | int | Day in sprint (1–10) |
| `sprint_length` | int | Total sprint length |
| `developers` | list | Each dev's skill, capacity, load, tasks, availability |
| `tasks` | list | Each task's type, priority, effort, deadline, status, progress |
| `reward` | float | Step reward |
| `cumulative_reward` | float | Total reward this episode |
| `tasks_completed/missed/in_progress/backlog` | int | Status counts |
| `workload_balance_score` | float | 0=unbalanced, 1=perfect |
| `events` | list | Events that just happened (completions, misses, absences) |
| `done` | bool | Whether episode is complete |
---
## 🎯 Tasks (Scenarios)
| ID | Difficulty | Devs | Tasks | Random Events |
|---|---|---|---|---|
| `easy_sprint` | 🟢 Easy | 3 | 5 | None |
| `medium_sprint` | 🟡 Medium | 4 | 8 | Dev absences, bugs expire |
| `hard_sprint` | 🔴 Hard | 5 | 12 | Urgent bugs mid-sprint, cascading failures |
### Baseline Scores (meta-llama/Llama-3.1-8B-Instruct)
| Task | Score |
|---|---|
| `easy_sprint` | 0.01 |
| `medium_sprint` | 0.46 ████████ |
| `hard_sprint` | 0.01 |
| **Average** | **0.16** |
---
## 💰 Reward Function
| Event | Reward |
|---|---|
| Assign task (skill match) | +0.8 to +1.3 |
| Assign task (skill mismatch penalty) | +0.1 to +0.6 |
| Wrong skill / over capacity | -0.15 |
| Task completed on time | +0.5 to +2.5 |
| Task completed late | +0.1 |
| Task missed deadline | -0.3 to -1.5 |
| Urgent bug missed | -0.25 extra |
| Skip (no action) | -0.05 |
| Final score bonus | score × 10.0 |
---
## 🔌 API Reference
```bash
# Health check
GET /health → {"status": "ok", "env": "ai-sprint-manager"}
# Start new episode
POST /reset
Body: {"task_name": "easy_sprint", "seed": 42}
# Take one action
POST /step
Body: {"action": {"action_type": "assign", "task_id": "T1", "dev_id": "dev1"}}
# Get full state
GET /state
# List scenarios
GET /tasks
```
---
## 🐍 Python Client Usage
```python
from client import SprintEnvClient
from sprint_env.models import SprintAction
# Connect to live Space
with SprintEnvClient(base_url="https://sejal-k-ai-sprint-manager.hf.space") as env:
# Reset
obs = env.reset(task_name="medium_sprint", seed=42)
# Agent loop
while not obs["done"]:
action = SprintAction(
action_type="assign",
task_id="T1",
dev_id="dev1",
)
result = env.step(action)
print(result) # StepResult(reward=+1.20, done=False, day=2, completed=0)
obs = result.observation
```
---
## 🗂️ Project Structure
```
ai-sprint-manager-openenv/
├── openenv.yaml # OpenEnv spec metadata
├── pyproject.toml # Project dependencies
├── Dockerfile # Container definition
├── requirements.txt # Python dependencies
├── inference.py # Baseline LLM agent script
├── client.py # Typed Python client (for RL training)
├── ui.py # Gradio UI + FastAPI combined server
├── start.sh # Container startup script
├── data/
│ └── sprint_data.json # All scenario data (customizable!)
├── sprint_env/
│ ├── __init__.py
│ ├── models.py # Pydantic Action/Observation/State
│ ├── tasks.py # Task & Developer dataclasses
│ ├── environment.py # Core RL environment logic
│ ├── graders.py # Scoring functions (easy/medium/hard)
│ └── data_loader.py # JSON data loader with caching
└── server/
├── __init__.py
└── app.py # OpenEnv-compliant FastAPI server entry
```
---
## 🔧 Bring Your Own Data
Don't want to use our sample scenarios? Edit `data/sprint_data.json`:
```json
{
"scenarios": {
"my_custom_sprint": {
"description": "My team's actual sprint",
"difficulty": "medium",
"developers": [
{"id": "dev1", "name": "Your Name", "skill": "backend", "capacity": 5, "productivity": 1.0}
],
"tasks": [
{"id": "T1", "name": "Your Task", "task_type": "feature", "priority": 1,
"effort": 3, "deadline": 5, "required_skill": "backend"}
]
}
}
}
```
Or point to your own file:
```bash
export SPRINT_DATA_PATH=/path/to/your/data.json
python ui.py
```
---
## 🚀 Setup & Run
```bash
# Clone
git clone https://github.com/sejalsksagar/ai-sprint-manager-openenv.git
cd ai-sprint-manager-openenv
# Install
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
# Configure
cp .env.example .env
# Edit .env with your HF_TOKEN
# Run locally
python ui.py
# Open http://localhost:7860
# Docker
docker build -t ai-sprint-manager .
docker run -p 7860:7860 ai-sprint-manager
# Run inference
python inference.py
```
---
## 🤖 Can an RL Agent Learn From This?
Yes. The environment is designed for policy gradient training (GRPO, PPO):
```python
# Example training loop skeleton (TRL/GRPO compatible)
from client import SprintEnvClient
from sprint_env.models import SprintAction
env = SprintEnvClient(base_url="http://localhost:7860")
for episode in range(1000):
obs = env.reset(task_name="medium_sprint")
trajectory = []
while not obs["done"]:
action = policy.sample(obs) # your policy here
result = env.step(action)
trajectory.append((obs, action, result.reward))
obs = result.observation
policy.update(trajectory) # GRPO/PPO update
```
The shaped reward function provides learning signal at every step — not just at episode end — which is critical for efficient RL training.
---
## 👥 Team
Built for the **Meta PyTorch OpenEnv Hackathon x SST | India AI Hackathon '26**