muffin2006/document-classification-env
๐ Document Classification Environment
OpenEnv submission for Meta x PyTorch Hackathon
An interactive Gymnasium-compatible environment where AI agents learn to classify and route customer support tickets to the correct department.
๐ฏ Real-World Task
Customer support teams receive hundreds of tickets daily โ billing issues, technical bugs, HR complaints, legal queries. This environment simulates that routing challenge, training agents to read a document and instantly decide which department should handle it.
Why this matters: Misrouted tickets waste time and frustrate customers. A well-trained agent can reduce misrouting by 80%+.
๐๏ธ Environment Design
DocumentClassificationEnv(task_difficulty="hard", seed=42)
โโโ observation_space: Dict
โ โโโ content: Text (the document)
โ โโโ document_id: Text
โ โโโ word_count: Box(1,)
โ โโโ has_urgency_markers: MultiBinary(1)
โ โโโ features: Box(100,) โ TF-IDF features
โ โโโ document_index: Box(1,)
โ โโโ total_documents: Box(1,)
โโโ action_space: Discrete(N) โ N = num categoriesAPI
from environment import DocumentClassificationEnv
env = DocumentClassificationEnv(task_difficulty="hard", seed=42)
obs, info = env.reset()
while True:
action = your_agent(obs) # int: category index
obs, reward, done, _, info = env.step(action)
print(f"Reward: {reward:.3f}, Correct: {info['is_correct']}")
if done:
print(info["episode_summary"])
break๐ Three Progressive Tasks
Categories (Hard Mode โ 22 total)
General Billing Billing-Dispute Billing-Refund Support Support-Urgent Support-Normal Technical Technical-Bug Technical-Feature HR HR-Payroll HR-Benefits HR-Complaint Legal Legal-Contract Legal-Compliance Executive Executive-Strategic Finance Marketing Operations
๐ Reward Function
reward = accuracy_reward + speed_bonus
# accuracy_reward:
# +1.0 for correct classification
# -0.5 for wrong classification
# speed_bonus (difficulty-dependent):
# Easy: +0.10 if < 100ms
# Medium: +0.15 if < 200ms, +0.10 if < 500ms
# Hard: +0.20 if < 100ms, +0.10 if < 300msPartial credit via speed bonus encourages efficient inference, not just accuracy.
๐ Baseline Results (Keyword Agent)
Better agents (TF-IDF similarity, fine-tuned LLM) can significantly beat baseline.
๐ Quick Start
git clone https://huggingface.co/spaces/TanujInsane/document-classification-env
cd document-classification-env
pip install -r requirements.txt
# Run baseline
python baseline_inference.py --task all --output results.json
# Launch UI
python app.py๐ File Structure
โโโ environment.py # Main Gymnasium environment
โโโ tasks.py # Document generation + TF-IDF features
โโโ grading.py # Scoring logic (0.0 - 1.0)
โโโ baseline_inference.py # Keyword-based baseline agent
โโโ app.py # Gradio interactive demo
โโโ test_environment.py # 5 unit tests (all passing โ
)
โโโ openenv.yaml # OpenEnv specification
โโโ Dockerfile # Container deployment
โโโ requirements.txt # Dependencies๐ฌ Reproducibility
- Seed-controlled document generation
- Fixed test sets for fair grading
- Deterministic reward calculation
- Docker containerization for consistent deployment
๐ก Improving Beyond Baseline
# Example: TF-IDF similarity agent (beats keyword matching)
from sklearn.metrics.pairwise import cosine_similarity
class TFIDFAgent:
def __init__(self, difficulty):
self.env = DocumentClassificationEnv(difficulty)
# Pre-compute category centroid vectors
# Use cosine similarity at inference time
...Built for Meta x PyTorch OpenEnv Hackathon | Gymnasium-compatible | Docker deployed
