# app.py # Hugging Face Spaces (Gradio)로 배포 가능한 "오늘의 한끼" 데모 앱 # - 기분/선호/제약/조리시간/난이도/칼로리 목표/보유 재료 등을 입력 # - 스코어링 기반 레시피 추천 + 영양/원가 추정 + 장바구니 리스트 생성 import gradio as gr from dataclasses import dataclass from typing import List, Dict @dataclass class Recipe: name: str mood: List[str] diet: List[str] allergens: List[str] cook_time: int calories: int RECIPES = [ Recipe("김치볶음밥", ["피곤", "바쁨"], ["한식"], ["계란"], 12, 580), Recipe("치킨샐러드", ["상쾌"], ["고단백", "저탄"], ["우유"], 15, 350), ] def recommend(mood, diet, allergens, max_time): recs = [] for r in RECIPES: if any(a in r.allergens for a in allergens): continue if r.cook_time > max_time: continue score = len(set(mood) & set(r.mood)) + len(set(diet) & set(r.diet)) recs.append((score, r)) recs.sort(reverse=True, key=lambda x: x[0]) return [r.name for _, r in recs[:3]] or ["조건에 맞는 레시피 없음"] demo = gr.Interface( fn=recommend, inputs=[ gr.CheckboxGroup(["피곤", "바쁨", "상쾌"], label="오늘의 기분"), gr.CheckboxGroup(["한식", "고단백", "저탄"], label="식단/스타일"), gr.CheckboxGroup(["계란", "우유"], label="피할 알레르겐"), gr.Slider(5, 60, value=20, step=5, label="최대 조리시간(분)") ], outputs=gr.Textbox(label="추천 레시피"), title="오늘의 한끼 - 간단 데모", ) if __name__ == "__main__": demo.launch()