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. 네, **최신 트렌드를 반영**하여 지속적으로 업데이트될 예정입니다. 새로운 티와 다과 정보, 다양한 페어링 조합, 전문가의 팁 등을 추가하여 더욱 풍부하고 만족스러운 티타임 경험을 제공하겠습니다. --- **티 페어링 마스터와 함께 향긋한 티타임을 즐겨보세요!** ☕ """, )