File size: 3,591 Bytes
b393d63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# Deploying Bio-Bite to a Hugging Face Space

## 1. Create the Space

1. Go to [huggingface.co](https://huggingface.co) β†’ profile picture β†’ **New Space**
2. **Space name:** `bio-bite` (owner: `benjac8`)
3. **License:** MIT
4. **SDK:** **Gradio**
5. **Hardware:** **ZeroGPU** ⚠️ *this is the important one* β€” the free CPU tier is far too slow for a 3B model
6. **Visibility:** Public
7. Create

> ZeroGPU is free but requires a verified email and an account older than 30 days, with a limit of 2 ZeroGPU Spaces per free account. If ZeroGPU isn't offered, see *Troubleshooting* below.

## 2. Upload the four files

**Files** tab β†’ **Add file β†’ Upload files**, then drag in all of these:

| File | Size | Purpose |
|---|---|---|
| `app.py` | 13 KB | The application |
| `requirements.txt` | <1 KB | Dependencies |
| `README.md` | 3 KB | Space card (its YAML header configures the Space) |
| `biobite_embeddings.parquet` | 22 MB | Precomputed embeddings (uploads via Git LFS automatically) |
| `recovery_guidance.json` | 2 KB | The coded recovery science |

Commit. The Space will start building β€” watch the **Logs** tab.

First build takes ~5–10 minutes (installing torch/transformers, then downloading the models on first run).

## 3. Optional: the live-data bonus

**Settings β†’ Variables and secrets β†’ New secret**

- Name: `SPOONACULAR_API_KEY`
- Value: your free key from [spoonacular.com/food-api](https://spoonacular.com/food-api)

The app then shows a real photo of the generated dish. Without the key it simply skips the image β€” nothing breaks.

## 4. Test it

Click a **Quick Starter**, then **Generate My Bio-Bite**. Expect ~15–25 seconds for the first response (model warm-up), faster afterwards.

Verify:

- [ ] 3 recipe cards appear with sensible macros
- [ ] The detected recovery state matches the description
- [ ] The generated recipe respects the constraint (e.g. no salmon when you said "no salmon")
- [ ] "Why this works" mentions relevant nutrients
- [ ] Tomorrow's plan has timed bullets
- [ ] Disclaimer is visible

## 5. Submit

Put both links on Moodle:

- **Dataset:** `https://huggingface.co/datasets/benjac8/bio-bite-recovery-nutrition`
- **Space:** `https://huggingface.co/spaces/benjac8/bio-bite`

---

## Troubleshooting

**Build fails on `spaces` import** β€” that's normal locally; on a ZeroGPU Space the package is preinstalled. If you're on CPU hardware, the app falls back automatically (just slowly).

**"GPU quota exceeded"** β€” the free ZeroGPU allowance is ~5 minutes of GPU time per day (roughly 15–20 requests). Don't burn it on casual testing; save it for the demo. It resets daily.

**Out of memory** β€” reduce `max_new_tokens` in `app.py` (760 β†’ 500), or switch `GEN_MODEL` to `Qwen/Qwen2.5-1.5B-Instruct` (note: it failed JSON validation in benchmarking, so quality will drop).

**Model returns unexpected format** β€” the app catches this and asks the user to press again. It's occasional and expected with sampling; pressing again resolves it.

**Slow first request** β€” the models download on first run (~6 GB). Subsequent requests are much faster. Warm the Space up a few minutes before presenting.

## Demo-day checklist

- Open the Space ~10 minutes early and run one query to warm it up
- Have the dataset page open in a second tab
- Know your headline numbers: 10,000 rows Β· precision@3 = 0.806 Β· 3 embedding models compared Β· 3 generators benchmarked
- Be ready to explain: *why the science is coded rather than generated*, and *why the 3B model was both faster and more reliable than the smaller ones*