Spaces:
Sleeping
Sleeping
| # Deployment Guide β HuggingFace Spaces | |
| Complete step-by-step instructions to get your environment live and | |
| passing all automated judging checks. | |
| --- | |
| ## Step 1 β Create a HuggingFace Account + Space | |
| 1. Go to https://huggingface.co and sign up (free) | |
| 2. Click your profile β **New Space** | |
| 3. Fill in: | |
| - **Space name**: `support-ticket-agent` | |
| - **License**: MIT | |
| - **SDK**: Docker β IMPORTANT, must be Docker | |
| - **Visibility**: Public β judges need to access it | |
| 4. Click **Create Space** | |
| --- | |
| ## Step 2 β Upload Your Files | |
| You need to upload exactly these 9 files to your Space: | |
| ``` | |
| main.py | |
| environment.py | |
| models.py | |
| graders.py | |
| baseline.py | |
| openenv.yaml | |
| requirements.txt | |
| Dockerfile | |
| README.md | |
| ``` | |
| **Option A β via the HuggingFace web UI:** | |
| 1. In your Space, click **Files** tab | |
| 2. Click **Add file β Upload files** | |
| 3. Upload all 9 files at once | |
| 4. Click **Commit changes** | |
| **Option B β via Git (faster):** | |
| ```bash | |
| # Install git-lfs first | |
| git lfs install | |
| # Clone your empty space | |
| git clone https://huggingface.co/spaces/YOUR_USERNAME/support-ticket-agent | |
| cd support-ticket-agent | |
| # Copy all your files here | |
| cp /path/to/your/files/* . | |
| # Push | |
| git add . | |
| git commit -m "Initial deployment" | |
| git push | |
| ``` | |
| --- | |
| ## Step 3 β Set Your OpenAI API Key as a Secret | |
| 1. In your Space, go to **Settings** tab | |
| 2. Scroll to **Repository secrets** | |
| 3. Click **New secret** | |
| 4. Name: `OPENAI_API_KEY` | |
| 5. Value: your `sk-...` key | |
| 6. Click **Save** | |
| > The key is injected as an environment variable at runtime. | |
| > It's never visible in your code or logs. | |
| --- | |
| ## Step 4 β Watch It Build | |
| 1. Go to the **App** tab of your Space | |
| 2. You'll see "Building..." with Docker logs | |
| 3. First build takes ~3-5 minutes (downloads dataset from HuggingFace) | |
| 4. Once you see `Application startup complete`, it's live | |
| **If the build fails**, click **Logs** and look for: | |
| - Missing file β check Step 2 | |
| - Port error β Dockerfile already uses 7860, should be fine | |
| - Dataset error β HuggingFace dataset download issues (retry) | |
| --- | |
| ## Step 5 β Verify It's Working | |
| Once live, your Space URL will be: | |
| `https://YOUR_USERNAME-support-ticket-agent.hf.space` | |
| Test each endpoint in your browser or with curl: | |
| ```bash | |
| BASE="https://YOUR_USERNAME-support-ticket-agent.hf.space" | |
| # 1. Health check β must return 200 | |
| curl $BASE/health | |
| # 2. Tasks list β must return all 3 tasks | |
| curl $BASE/tasks | |
| # 3. Reset β start episode | |
| curl -X POST $BASE/reset \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"task_id": "task1"}' | |
| # 4. Step β submit action | |
| curl -X POST $BASE/step \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"department": "Technical", "priority": 2}' | |
| # 5. State | |
| curl $BASE/state | |
| # 6. Grader β test directly | |
| curl -X POST $BASE/grader \ | |
| -H "Content-Type: application/json" \ | |
| -d '{ | |
| "task_id": "task2", | |
| "ticket_body": "My invoice is wrong", | |
| "ticket_subject": "Billing issue", | |
| "gold_department": "Billing", | |
| "gold_priority": 2, | |
| "predicted_department": "Billing", | |
| "predicted_priority": 2 | |
| }' | |
| # 7. Baseline β runs GPT-4o-mini (needs API key set) | |
| curl -X POST $BASE/baseline \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"task_ids": ["task1","task2","task3"], "max_tickets": 5}' | |
| ``` | |
| --- | |
| ## Step 6 β Submit to the Hackathon | |
| 1. Go to the hackathon portal | |
| 2. Click **Submit your Assessment** | |
| 3. Paste your Space URL: | |
| `https://YOUR_USERNAME-support-ticket-agent.hf.space` | |
| 4. Also paste your GitHub/HuggingFace repo link | |
| 5. Submit before **April 7, 11:59 PM** | |
| --- | |
| ## Pre-Submission Checklist | |
| Go through this before submitting β all must pass: | |
| - [ ] HuggingFace Space URL returns 200 on `/health` | |
| - [ ] `/reset` returns an observation with ticket data | |
| - [ ] `/step` returns reward with score between 0.0 and 1.0 | |
| - [ ] `/tasks` returns all 3 tasks with action schemas | |
| - [ ] `/grader` returns a score for a test action | |
| - [ ] `/baseline` returns scores (even mock scores without API key) | |
| - [ ] `docker build` works locally without errors | |
| - [ ] `openenv.yaml` has name, tasks, endpoints, reward_range fields | |
| - [ ] README has environment description, action space, setup instructions | |
| - [ ] Baseline scores span easy (~0.8) β hard (~0.4) β shows difficulty range | |
| --- | |
| ## Testing Docker Locally (Before Uploading) | |
| ```bash | |
| cd support_ticket_env/ | |
| # Build | |
| docker build -t support-ticket-agent . | |
| # Run | |
| docker run -p 7860:7860 -e OPENAI_API_KEY=sk-... support-ticket-agent | |
| # Test | |
| curl http://localhost:7860/health | |
| curl http://localhost:7860/tasks | |
| ``` | |
| --- | |
| ## Common Issues and Fixes | |
| | Problem | Fix | | |
| |---------|-----| | |
| | Space stuck on "Building" | Check Logs tab for errors | | |
| | `ModuleNotFoundError` | Check requirements.txt has all packages | | |
| | Dataset load fails | HuggingFace may be rate-limiting β retry | | |
| | `/baseline` returns no_api_key | Set OPENAI_API_KEY secret in Space settings | | |
| | Port 7860 not responding | Make sure Dockerfile EXPOSE 7860 is there | | |
| | `openenv validate` fails | Check openenv.yaml has all required fields | | |
| --- | |
| ## What Judges Check (Automated) | |
| The judging system will automatically: | |
| 1. Ping `YOUR_SPACE_URL/health` β must return `{"status": "ok"}` | |
| 2. POST to `/reset` β must return observation with ticket data | |
| 3. POST to `/step` with an action β must return score in [0.0, 1.0] | |
| 4. GET `/tasks` β must list 3 tasks with action schemas | |
| 5. Run `docker build` on your repo | |
| 6. POST to `/baseline` β must return scores without crashing | |
| **All 6 must pass or you are disqualified.** | |
| Make sure to test every single one before submitting. |