teapairing / app.py
ll7098ll's picture
Update app.py
b008b72 verified
import os
import time
import streamlit as st
import google.generativeai as genai
from streamlit_extras.colored_header import colored_header
from streamlit_extras.add_vertical_space import add_vertical_space
from streamlit_extras.stoggle import stoggle
# Google Gemini API Key 설정
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
# 모델 설정
generation_config = {
"temperature": 0.8,
"top_p": 0.95,
"top_k": 64,
"max_output_tokens": 8192,
"response_mime_type": "text/plain",
}
model = genai.GenerativeModel(
model_name="gemini-2.0-flash",
generation_config=generation_config,
)
def generate_pairing_recommendation(input_text, input_type, situation):
"""
입력받은 티 또는 다과에 어울리는 페어링 정보를 생성합니다.
"""
SYSTEM_PROMPT = f"""
**티 페어링 마스터입니다!** 🎉
상황/분위기를 고려하여 한국인의 취향에 맞는 티와 다과를 추천합니다.
티 전문가와 다과 전문가의 관점을 통합하여 추천합니다.
입력하신 {input_type} '{input_text}'에 어울리는 최고의 페어링을 찾아드리겠습니다.
'{situation}' 상황에 딱 맞는, 더욱 풍요로운 티타임을 위한 맞춤 추천을 제공합니다.
다음과 같은 요소들을 종합적으로 고려하여 최적의 페어링을 제안합니다.
* **상황 및 분위기:** '{situation}'에 맞춰 여유로운 분위기, 활기찬 분위기, 차분한 분위기 등을 고려합니다.
* **맛과 향의 조화:** 티와 다과의 맛과 향이 서로 보완하고 풍미를 높이는 조합을 찾습니다.
* **질감의 조화:** 부드러운 티와 바삭한 다과, 묵직한 티와 촉촉한 다과 등 다양한 질감의 조합을 고려합니다.
* **온도의 조화:** 따뜻한 티와 차가운 다과, 차가운 티와 따뜻한 다과 등 온도의 조합을 고려합니다.
* **한국인의 취향:** 한국인의 입맛과 선호도를 고려한 맞춤 추천을 제공합니다.
* **전문가의 팁:** 티 우리는 방법, 다과와 함께 즐기기 좋은 음악이나 책 추천 등 전문가의 팁을 제공합니다.
* **다양한 선택지:** 최소 4가지 이상의 다양한 페어링을 추천합니다.
* **상세한 설명:** 각 페어링에 대한 추천 이유와 함께 티와 다과에 대한 자세한 정보 (종류, 맛, 향, 질감, 온도, 원산지, 제조법, 추천 점수 등) 를 제공합니다.
* **차 센서리 정보:** 티의 경우 향, 아로마, 맛, 바디감, 밸런스, 후미 등의 센서리 정보를 포함합니다.
**페어링 구성 요소:**
1. 추천 차/다과 소개 (티/다과 정보 포함)
2. 맛, 향, 질감, 온도 설명 (티의 경우 테이스팅 노트, 센서리 정보를 구체적으로 작성)
3. 추천 이유 (상황/분위기, 미식적 조화, 창의성, 한국인 취향 고려)
4. 추가 페어링 제안 (대체 가능한 티/다과, 곁들임 메뉴 등)
5. 추천 점수 (10점 만점)
6. 추가 정보 (페어링을 더욱 풍부하게 즐길 수 있는 방법)
**입력 종류:** {input_type}
**입력 내용:** {input_text}
**추천 페어링:**
"""
response = model.generate_content(SYSTEM_PROMPT, stream=True)
collected_text = ""
for token in response:
chunk = token.text
collected_text += chunk
yield collected_text
time.sleep(0.03)
# Streamlit Interface
st.set_page_config(
page_title="티 페어링 마스터",
page_icon="🌿",
layout="centered",
initial_sidebar_state="expanded",
)
colored_header(
label="🌿 티 페어링 마스터",
description="🍵 티 또는 다과를 입력하시면 최고의 페어링을 찾아드립니다. 상황과 분위기에 맞는 완벽한 조합으로 향긋한 티타임을 즐겨보세요!",
color_name="green-60",
)
add_vertical_space(1)
# 사이드바 입력 영역
st.sidebar.markdown("## 📝 입력 정보")
# 사용자 입력 영역 (사이드바 탭으로 분리)
tabs = st.sidebar.tabs(["🍰 다과 입력", "🍵 티 입력"])
with tabs[0]:
st.markdown("#### 다과를 입력해 주세요:")
input_text_snack = st.text_input("예: 수제 양갱, 마들렌, 과일 타르트 등", key="input_text_snack")
with tabs[1]:
st.markdown("#### 티를 입력해 주세요:")
input_text_tea = st.text_input("예: 백차, 보이차, 루이보스 등", key="input_text_tea")
# 상황 또는 분위기 입력 (사이드바)
st.sidebar.markdown("#### 상황이나 분위기를 입력해 주세요:")
situation = st.sidebar.text_area("예: 햇살 좋은 오후, 비 오는 날, 독서 시간 등", height=100, key="situation")
# 페어링 추천 받기 버튼
generate_button = st.sidebar.button("✨ 페어링 추천 받기")
# 출력 영역 정의
output_area = st.empty()
# 추천 결과 생성 및 출력
if generate_button:
input_type = "다과" if st.session_state.input_text_snack else "티"
input_text = st.session_state.input_text_snack if st.session_state.input_text_snack else st.session_state.input_text_tea
situation = st.session_state.situation
if input_text: # 입력값이 있을 때만 추천 시작
output_text = ""
output_area.markdown(output_text)
try:
with st.spinner("페어링 정보를 생성 중입니다... 잠시만 기다려 주세요!"):
for partial_output in generate_pairing_recommendation(input_text, input_type, situation):
output_text = partial_output
output_area.markdown(output_text)
except Exception as e:
st.error(f"오류가 발생했습니다: {str(e)}")
else:
st.warning("티 또는 다과를 입력해주세요.")
# 추가 정보 및 FAQ
add_vertical_space(2)
with st.expander("🍵 티 페어링 마스터 FAQ"): # FAQ 내용 접기/펼치기 기능 추가
st.markdown(
"""
**티 페어링 마스터에 오신 것을 환영합니다!** 🎉
이 앱은 단순히 티와 다과를 매칭하는 것을 넘어, **최상의 미식 경험을 선사**하는 것을 목표로 합니다.
티 페어링 전문가의 섬세한 감각과 지식을 바탕으로, **상황과 분위기에 맞는 완벽한 페어링**을 제안합니다.
소중한 사람들과의 티타임, 혼자만의 여유로운 시간, 특별한 날을 더욱 향긋하고 풍요롭게 만들어보세요!
---
**Q1. 어떤 상황에 페어링 추천을 받을 수 있나요?**
A. **어떤 상황이든** 완벽한 티타임을 위한 페어링을 추천해 드립니다! 예를 들어:
* **여유로운 오후:** 부드러운 홍차와 달콤한 스콘
* **친구들과의 티타임:** 상큼한 과일 티와 다채로운 다과
* **비 오는 날:** 따뜻한 허브티와 촉촉한 케이크
* **집중이 필요한 시간:** 맑은 녹차와 담백한 떡
* **기념일/생일:** 고급스러운 티와 특별한 디저트
* **계절별 추천:** 봄에는 향긋한 꽃차, 여름에는 시원한 냉침차, 가을에는 따뜻한 홍차, 겨울에는 깊은 풍미의 보이차
**Q2. 페어링 추천은 어떻게 이루어지나요?**
A. 다음 요소들을 종합적으로 고려하여 **최적의 페어링**을 추천합니다.
* **티 종류:** 녹차, 홍차, 우롱차, 허브티, 과일티 등
* **다과 종류:** 케이크, 쿠키, 마카롱, 초콜릿, 빵, 과일, 떡 등
* **맛과 향의 조화:** 티와 다과의 맛과 향이 서로 보완하고 풍미를 높이는 조합
* **질감의 조화:** 부드러운 티와 바삭한 다과, 촉촉한 티와 단단한 다과 등 다양한 질감의 조합
* **온도의 조화:** 따뜻한 티와 차가운 다과, 시원한 티와 따뜻한 다과 등 온도의 조합
* **상황 및 분위기:** 여유로운 분위기, 활기찬 분위기, 차분한 분위기 등
* **한국인의 취향:** 한국인의 입맛과 선호도를 고려한 맞춤 추천
* **전문가의 팁:** 티 우리는 방법, 다과와 함께 즐기기 좋은 음악이나 책 추천 등
**Q3. 더욱 풍부한 티타임을 즐기기 위한 팁이 있나요?**
A. 네, 추천 페어링과 함께 다음과 같은 팁을 제공합니다.
* **티 우리는 방법:** 티의 종류에 따라 적절한 물 온도와 우리는 시간 안내
* **다과와의 조합 팁:** 티와 다과의 맛과 향을 더욱 잘 어울리게 즐기는 방법
* **분위기 연출 팁:** 티타임에 어울리는 음악, 조명, 소품 등 추천
**Q4. 이 앱은 지속적으로 업데이트되나요?**
A. 네, **최신 트렌드를 반영**하여 지속적으로 업데이트될 예정입니다.
새로운 티와 다과 정보, 다양한 페어링 조합, 전문가의 팁 등을 추가하여 더욱 풍부하고 만족스러운 티타임 경험을 제공하겠습니다.
---
**티 페어링 마스터와 함께 향긋한 티타임을 즐겨보세요!** ☕
""",
)