|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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() |
|
|
|