--- 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/<๋ณธ์ธ>/ cd 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 URL ์ œ์ถœ - [ ] title/emoji/ํ”„๋กฌํ”„ํŠธ ์ค‘ ํ•˜๋‚˜ ์ด์ƒ ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆ - [ ] ๊ฒฐ๊ณผ ์Šคํฌ๋ฆฐ์ƒท 1์žฅ + 2~3์ค„ ์„ค๋ช… ## ์‚ฌ์šฉ ๋ชจ๋ธ | ์—ญํ•  | ๋ชจ๋ธ | |------|------| | ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜ | `nateraw/food` | | ์นผ๋กœ๋ฆฌ ์ถ”์ • LLM | `meta-llama/Meta-Llama-3-8B-Instruct` |