Meta-R2: Complete HuggingFace Deployment Guide (Option A)
This guide walks you through every single step to deploy Meta-R2 to HuggingFace using the cleanest architecture:
- Your trained model (500MB) β uploaded as a HuggingFace Model Repository
- Your code + environment β deployed as a HuggingFace Space (Docker)
The Space will auto-download the model from the Model Repo at startup. No Git LFS. No 500MB in your code repo.
πΊοΈ Architecture Overview
HuggingFace
βββ YOUR-USERNAME/lifestack-agent β Model Repo (the 500MB weights)
β βββ config.json
β βββ tokenizer.json
β βββ tokenizer_config.json
β βββ special_tokens_map.json
β βββ model.safetensors (or pytorch_model.bin)
β
βββ YOUR-USERNAME/meta-r2 [SPACE] β Code Repo (Docker Space)
βββ Dockerfile (already exists β
)
βββ requirements.txt (already exists β
)
βββ app_flask.py (entry point β
)
βββ core/ agent/ scripts/ ... (all your code β
)
βββ openenv.yaml (already exists β
)
β at startup
agent.py calls AutoModelForCausalLM.from_pretrained("YOUR-USERNAME/lifestack-agent")
β HuggingFace downloads the model to the Space's /root/.cache/huggingface/
β Pre-Flight Checklist (Do These Before Anything Else)
Go through every item below before starting the upload steps.
1. Confirm Your Trained Model Files Exist
Unzip the 500MB file from Kaggle. Open the folder. You must see these files:
lifestack_model/
βββ config.json β REQUIRED
βββ tokenizer.json β REQUIRED
βββ tokenizer_config.json β REQUIRED
βββ special_tokens_map.json β REQUIRED (may be missing β check below)
βββ model.safetensors β REQUIRED (the big file)
OR
βββ pytorch_model.bin β (alternative format, also fine)
If any of these are missing, the model is an incomplete checkpoint. Re-download or re-run training with
save_model=Trueat the end oftrain_trl.py.
2. Confirm requirements.txt Is Correct
Your requirements.txt already has:
openenv-core>=0.2.3β (latest version, confirmed)pydantic>=2.7.0βtransformers>=4.40.0β (needed to download model from Hub)torch>=2.0.0β
No changes needed to requirements.txt.
3. Confirm the Dockerfile Entry Point
Your Dockerfile already runs:
CMD ["python", "app_flask.py"]
This is correct. app_flask.py is the web server.
No changes needed to the Dockerfile.
4. Make Sure .env is in .gitignore
Check your .gitignore β it already has:
.env
β
Your GROQ_API_KEY will never be pushed to GitHub or HuggingFace by accident.
5. Make the One Required Code Change in agent.py
This is the only code edit required for Option A.
Open /Users/dayalgupta/Desktop/Meta-R2/agent/agent.py and find lines 13β18:
# CURRENT CODE (lines 13-18):
self.api_key = os.getenv('GROQ_API_KEY')
self.local_model_path = local_model_path or os.getenv('LIFESTACK_MODEL_PATH')
# Fallback to current directory if default existence
if not self.local_model_path and os.path.exists("./lifestack_model"):
self.local_model_path = "./lifestack_model"
Change it to this (replace YOUR-USERNAME with your actual HuggingFace username):
# UPDATED CODE:
self.api_key = os.getenv('GROQ_API_KEY')
self.local_model_path = local_model_path or os.getenv('LIFESTACK_MODEL_PATH')
# 1. Check for local folder (Kaggle / local dev)
if not self.local_model_path and os.path.exists("./lifestack_model"):
self.local_model_path = "./lifestack_model"
# 2. Fall back to HuggingFace Hub model repo (production / Space deployment)
if not self.local_model_path:
self.local_model_path = "YOUR-USERNAME/lifestack-agent"
Why this works: AutoModelForCausalLM.from_pretrained() (which already exists on line 41) accepts either a local folder path OR a HuggingFace Hub repo ID like "username/repo-name". No other code change is needed.
6. Verify lifestack_model/ Is NOT in Your Code Repo
Your model (500MB) should NOT be in the Meta-R2 GitHub repository. Confirm:
ls /Users/dayalgupta/Desktop/Meta-R2/lifestack_model/
# Should print: "No such file or directory" OR "Empty directory"
If it has files, remove them:
rm -rf /Users/dayalgupta/Desktop/Meta-R2/lifestack_model/*
The folder can stay (it's referenced in the code) but must be empty.
π¦ PART 1: Upload the Model to HuggingFace Hub
Step 1.1 β Create a HuggingFace Account
Go to https://huggingface.co β click Sign Up β create your account. Remember your username (e.g., dayal-gupta) β you will use it everywhere.
Step 1.2 β Create a New Model Repository
- Go to https://huggingface.co/new (or click the
+button β "New Model") - Fill in:
- Owner: your username
- Model name:
lifestack-agent(this becomesYOUR-USERNAME/lifestack-agent) - License:
MIT(recommended for hackathons) - Visibility:
Public(required for the Space to download it without auth)
- Click Create Model
You now have an empty model repo at https://huggingface.co/YOUR-USERNAME/lifestack-agent.
Step 1.3 β Install the HuggingFace CLI
On your Mac terminal:
pip install huggingface_hub
huggingface-cli login
When prompted, go to https://huggingface.co/settings/tokens β click New token β name it anything β Role: Write β copy the token β paste it into the terminal.
Step 1.4 β Upload the Model Files
Navigate to where your unzipped model folder is (e.g., Desktop) and run:
# Replace the path with wherever your unzipped model folder is:
huggingface-cli upload YOUR-USERNAME/lifestack-agent /path/to/your/lifestack_model/ .
Example (if you unzipped on Desktop):
huggingface-cli upload dayal-gupta/lifestack-agent /Users/dayalgupta/Desktop/lifestack_model/ .
This uploads ALL files from the local folder to the root of the HF repo. The . at the end means "upload to the root of the repo."
This will take 3β8 minutes for a 500MB file on a normal connection. You'll see a progress bar.
Step 1.5 β Verify the Upload
Go to https://huggingface.co/YOUR-USERNAME/lifestack-agent in your browser.
You should see all files listed: config.json, tokenizer.json, model.safetensors, etc.
Click on config.json and confirm it contains "model_type" β this confirms the model is valid and complete.
Step 1.6 β Add a Model Card (Optional but Impressive for Judges)
Click the "Model Card" tab on your repo page β click the pencil icon to edit β paste this:
---
language: en
license: mit
tags:
- reinforcement-learning
- life-simulation
- grpo
- llama
- openenv
---
# LifeStack Agent β GRPO Fine-tuned
This model is the trained agent for [Meta-R2](https://huggingface.co/spaces/YOUR-USERNAME/meta-r2),
a reinforcement learning environment that simulates complex real-life decision-making scenarios.
Fine-tuned using GRPO (Group Relative Policy Optimization) via TRL on a custom reward function
spanning 23 life metrics across 6 domains: career, finances, relationships, physical health,
mental wellbeing, and time management.
## Usage
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("YOUR-USERNAME/lifestack-agent")
tokenizer = AutoTokenizer.from_pretrained("YOUR-USERNAME/lifestack-agent")
Click **Save**.
---
## π PART 2: Deploy the Project as a HuggingFace Space
### Step 2.1 β Create a New Space
1. Go to **https://huggingface.co/new-space**
2. Fill in:
- **Owner:** your username
- **Space name:** `meta-r2`
- **License:** `MIT`
- **SDK:** Select **"Docker"** β very important, NOT Gradio or Streamlit
- **Visibility:** `Public`
3. Click **Create Space**
You now have an empty Space at `https://huggingface.co/spaces/YOUR-USERNAME/meta-r2`.
### Step 2.2 β Connect Your GitHub Repository to the Space
This is the cleanest method β HuggingFace will auto-sync from your GitHub repo.
1. In your Space, click the **Settings** tab (gear icon)
2. Scroll down to **"Repository"** section
3. Click **"Link to a GitHub repository"**
4. Authorize HuggingFace to access your GitHub
5. Select the repo: `oki-dokii/Meta-R2`
6. Set branch: `main`
7. Click **Save**
Now every `git push` to `main` will automatically redeploy the Space.
**Alternative (manual push):** If you don't want to link GitHub, you can push directly to the HuggingFace Space repo:
```bash
cd /Users/dayalgupta/Desktop/Meta-R2
# Add HF Space as a second remote:
git remote add space https://huggingface.co/spaces/YOUR-USERNAME/meta-r2
# Push your code:
git push space main
Step 2.3 β Add the GROQ_API_KEY Secret to the Space
Your app needs the Groq API key at runtime. Never hardcode it. HuggingFace Spaces have a Secrets system for this.
- In your Space, click the Settings tab
- Scroll down to "Variables and secrets"
- Click "New secret"
- Fill in:
- Name:
GROQ_API_KEY - Value: your actual Groq API key (get it from https://console.groq.com/keys)
- Name:
- Click Save
Your agent.py already reads this via os.getenv('GROQ_API_KEY') β
β no code change needed.
Step 2.4 β Add HF_TOKEN Secret (Required to Download the Private Model)
If your model repo is Public (which we set in Step 1.2), you can skip this step.
If your model repo is Private, add another secret:
- Name:
HF_TOKEN - Value: your HuggingFace write token (same one from Step 1.3)
Then add this line at the top of app_flask.py (before any model-loading code):
import os
from huggingface_hub import login
hf_token = os.getenv("HF_TOKEN")
if hf_token:
login(token=hf_token)
Step 2.5 β Trigger the First Build
After pushing your code (Step 2.2), the Space will automatically start building.
- Go to your Space URL:
https://huggingface.co/spaces/YOUR-USERNAME/meta-r2 - Click the "App" tab β you'll see a build log
- The build will take 3β5 minutes for the first time (Docker pulls base image, installs packages)
- After build, it will show "Running" status β then the app will boot
During the first boot, the Space will call AutoModelForCausalLM.from_pretrained("YOUR-USERNAME/lifestack-agent") which will download the 500MB model. This takes about 60β90 seconds on HuggingFace infrastructure. After the first boot, it is cached and subsequent restarts are instant.
π PART 3: Verify Everything is Working
Step 3.1 β Check the Build Log
In your Space, click "Logs" tab. You should see:
β
Step 1/7 : FROM python:3.11-slim
β
Successfully built ...
β
Successfully tagged ...
If you see a red error, check the troubleshooting section below.
Step 3.2 β Check the App Boot Log
After the build, click the "App" tab. In the log output you should see:
π¦ Loading local GRPO model from YOUR-USERNAME/lifestack-agent...
β
Local model LOADED.
* Running on http://0.0.0.0:7860
If you see β οΈ Failed to load local model ... Falling back to Groq. β the model download failed. Check that your HF model repo URL is correct in agent.py and the repo is public.
Step 3.3 β Test the Live App
Go to https://huggingface.co/spaces/YOUR-USERNAME/meta-r2 and click through the demo:
- The web UI (served by
app_flask.py) should load - Start an episode β the agent should respond with life decisions
- Check that rewards are non-zero and steps > 5 (confirms the Task system is working)
π οΈ Troubleshooting Common Issues
| Error | Cause | Fix |
|---|---|---|
ModuleNotFoundError: openenv |
Wrong package in requirements.txt | Confirm openenv-core>=0.2.3 is in requirements.txt (not openenv) |
OSError: Can't load model |
Wrong repo ID in agent.py |
Make sure it's "YOUR-ACTUAL-USERNAME/lifestack-agent" not literally YOUR-USERNAME |
Build failed: torch install timeout |
torch>=2.0.0 is huge (2GB+) |
Add --extra-index-url https://download.pytorch.org/whl/cpu to Dockerfile before pip install |
Port 7860 not responding |
app_flask.py binding to wrong interface |
Confirm app.run(host='0.0.0.0', port=7860) at the bottom of app_flask.py |
GROQ_API_KEY not found |
Secret not set | Go to Space Settings β Variables and secrets β add GROQ_API_KEY |
Space keeps restarting |
Out of memory (free tier is 16GB RAM) | torch on CPU for 500MB model may OOM β see "Reducing Memory" note below |
Reducing Memory Usage (If Space OOMs)
Free HuggingFace Spaces have 16GB RAM. Loading a 500MB model in float32 uses ~2GB RAM, which is fine. But if you face OOM, add this to agent.py line 41β44:
self.local_model = AutoModelForCausalLM.from_pretrained(
self.local_model_path,
torch_dtype=torch.float16, # β half precision, halves memory
low_cpu_mem_usage=True, # β stream-loads, avoids peak RAM spike
device_map="cpu" # β explicitly CPU on free tier
)
π Final Pre-Submission Checklist
Before submitting to the hackathon, verify every item:
-
https://huggingface.co/YOUR-USERNAME/lifestack-agentexists and has all model files -
https://huggingface.co/spaces/YOUR-USERNAME/meta-r2shows "Running" status (green dot) - The Space app loads in browser without errors
- The Space log shows
β Local model LOADED(not "Falling back to Groq") - An episode runs and produces steps > 5 (confirms Task system is working)
-
GROQ_API_KEYsecret is set in Space settings (as fallback) - The model repo has a Model Card explaining what it is
- Your
README.mdin the code repo links to both: the Space URL and the Model URL -
agent.pyhas been updated with"YOUR-USERNAME/lifestack-agent"as the HF Hub fallback -
lifestack_model/folder in your localMeta-R2/repo is empty (model not in code repo) - All Bugs 1, 2, 3 are fixed and committed (they are β we did this already β )
π Quick Reference β All URLs
Replace YOUR-USERNAME with your HuggingFace username everywhere:
| What | URL |
|---|---|
| HuggingFace profile | https://huggingface.co/YOUR-USERNAME |
| Model repo | https://huggingface.co/YOUR-USERNAME/lifestack-agent |
| Space (live demo) | https://huggingface.co/spaces/YOUR-USERNAME/meta-r2 |
| Space settings (secrets) | https://huggingface.co/spaces/YOUR-USERNAME/meta-r2/settings |
| Space build logs | https://huggingface.co/spaces/YOUR-USERNAME/meta-r2 β Logs tab |
| HuggingFace API tokens | https://huggingface.co/settings/tokens |
| Groq API keys | https://console.groq.com/keys |
β‘ The Exact Commands to Run Right Now (In Order)
# 1. Install HF CLI
pip install huggingface_hub
# 2. Login (will prompt for token)
huggingface-cli login
# 3. Upload model (change the path to your unzipped model folder)
huggingface-cli upload YOUR-USERNAME/lifestack-agent /path/to/lifestack_model/ .
# 4. Make the agent.py code change (edit manually in VS Code, then):
cd /Users/dayalgupta/Desktop/Meta-R2
git add agent/agent.py
git commit -m "feat: add HuggingFace Hub model fallback for Option A deployment"
git push origin main
# 5. Push to HuggingFace Space (if not using GitHub auto-sync):
git remote add space https://huggingface.co/spaces/YOUR-USERNAME/meta-r2
git push space main
That's it. The Space will build and boot automatically.