calcal / README.md
workcha's picture
Upload 19 files
61b4ff5 verified
---
title: HuggingFace Calorie Counter
emoji: ๐Ÿฑ
colorFrom: pink
colorTo: yellow
sdk: gradio
sdk_version: 5.9.1
python_version: "3.11"
app_file: app.py
pinned: false
license: apache-2.0
---
# 6์ฃผ์ฐจ: HuggingFace Space ์นผ๋กœ๋ฆฌ ์นด์šดํ„ฐ
์Œ์‹ ์‚ฌ์ง„์„ ์—…๋กœ๋“œํ•˜๋ฉด HuggingFace Inference API๋กœ ์Œ์‹์„ ์ธ์‹ํ•˜๊ณ ,
LLM์ด 1์ธ๋ถ„ ๊ธฐ์ค€ ์นผ๋กœ๋ฆฌ/ํƒ„๋‹จ์ง€๋ฅผ ์ถ”์ •ํ•˜๋Š” Gradio ์•ฑ์ด๋‹ค.
์™„์„ฑ๋œ ์•ฑ์€ ๊ทธ๋Œ€๋กœ **HuggingFace Space** ์— ์˜ฌ๋ ค ๊ณต๊ฐœ URL์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
> ์ด ์ž๋ฃŒ์˜ ๊ธฐ์ˆ  ์ •๋ณด๋Š” 2026-04 ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค.
## ํŒŒ์ผ ๊ตฌ์กฐ
```
week06/
โ”œโ”€โ”€ app.py # Gradio ์•ฑ ๋ณธ์ฒด (TODO 4๊ณณ์„ ์ฑ„์›Œ ์™„์„ฑ)
โ”œโ”€โ”€ model_config.py # HF ๋ชจ๋ธ ์ด๋ฆ„ ์ƒ์ˆ˜ + InferenceClient ํŒฉํ† ๋ฆฌ
โ”œโ”€โ”€ requirements.txt # Space๊ฐ€ ์„ค์น˜ํ•  ์˜์กด์„ฑ
โ”œโ”€โ”€ .env.example # HF_TOKEN ํ…œํ”Œ๋ฆฟ
โ””โ”€โ”€ README.md # ์ด ํŒŒ์ผ (์•ž์˜ YAML์ด Space ์„ค์ •)
```
## ์‹คํ–‰ ๋ฐฉ๋ฒ• (๋กœ์ปฌ)
```bash
# 1) ํ† ํฐ ๋ฐœ๊ธ‰: https://huggingface.co/settings/tokens (Read ๊ถŒํ•œ)
cp .env.example .env
# .env ํŒŒ์ผ์„ ์—ด์–ด HF_TOKEN=hf_... ๋กœ ์ˆ˜์ •
# 2) ์˜์กด์„ฑ ์„ค์น˜
uv pip install -r requirements.txt
# 3) ์‹คํ–‰
uv run python app.py
# ๋ธŒ๋ผ์šฐ์ €: http://127.0.0.1:7860
```
## TODO (app.py ์•ˆ)
1. **`SYSTEM_PROMPT`** โ€” ์˜์–‘์‚ฌ ์—ญํ•  + JSON ์Šคํ‚ค๋งˆ ๊ฐ•์ œ (ChatPromptTemplate ์•ˆ์— ๋“ค์–ด๊ฐ€๋ฏ€๋กœ ์ค‘๊ด„ํ˜ธ๋Š” `{{ }}`๋กœ ์ด์Šค์ผ€์ดํ”„)
2. **`_chain_lazy()` ์•ˆ LCEL ์ฒด์ธ ์กฐ๋ฆฝ** (4๋‹จ๊ณ„)
- 2-1. `HuggingFaceEndpoint` ์ƒ์„ฑ (`repo_id=LLM_MODEL`, `task="text-generation"`, ํ† ํฐ)
- 2-2. `ChatHuggingFace(llm=endpoint)` ๋กœ ๊ฐ์‹ธ๊ธฐ
- 2-3. `ChatPromptTemplate.from_messages([("system", SYSTEM_PROMPT), ("human", "...{labels_json}")])`
- 2-4. `_chain = prompt | llm | JsonOutputParser()` ํŒŒ์ดํ”„ ์—ฐ๊ฒฐ
3. **`classify_food()`** โ€” `client.image_classification(tmp_path, model=VISION_MODEL)` ํ˜ธ์ถœ
4. **`estimate_calories()`** โ€” `chain.invoke({"labels_json": labels_json})` ํ˜ธ์ถœ
๋„ค ๊ณณ์„ ์ฑ„์šฐ๋ฉด ์•ฑ์ด ๋™์ž‘ํ•œ๋‹ค.
## HuggingFace Space ๋ฐฐํฌ ๋ฐฉ๋ฒ•
1. https://huggingface.co/new-space ์—์„œ **Gradio** SDK๋กœ Space ์ƒ์„ฑ
2. Space์˜ **Settings > Variables and secrets** ์— `HF_TOKEN` ๋“ฑ๋ก
3. ํŒŒ์ผ ์—…๋กœ๋“œ (์›น ๋“œ๋ž˜๊ทธ or `git push`)
```bash
git clone https://huggingface.co/spaces/<๋ณธ์ธ>/<space-์ด๋ฆ„>
cd <space-์ด๋ฆ„>
cp ../week06/{app.py,model_config.py,requirements.txt,README.md} .
git add .
git commit -m "init"
git push
```
4. ๋ช‡ ๋ถ„ ํ›„ `https://huggingface.co/spaces/<๋ณธ์ธ>/<space-์ด๋ฆ„>` ์ ‘์†ํ•˜์—ฌ ๋™์ž‘ ํ™•์ธ
## ๊ณผ์ œ
- [ ] Space URL ์ œ์ถœ
- [ ] title/emoji/ํ”„๋กฌํ”„ํŠธ ์ค‘ ํ•˜๋‚˜ ์ด์ƒ ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆ
- [ ] ๊ฒฐ๊ณผ ์Šคํฌ๋ฆฐ์ƒท 1์žฅ + 2~3์ค„ ์„ค๋ช…
## ์‚ฌ์šฉ ๋ชจ๋ธ
| ์—ญํ•  | ๋ชจ๋ธ |
|------|------|
| ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜ | `nateraw/food` |
| ์นผ๋กœ๋ฆฌ ์ถ”์ • LLM | `meta-llama/Meta-Llama-3-8B-Instruct` |