| | 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 |
| |
|
| | |
| | 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): |
| | """ |
| | 입력받은 안주 또는 주류에 어울리는 페어링 정보를 생성합니다. |
| | 상황/분위기를 고려하여 한국인의 취향에 맞는 주류나 안주를 추천합니다. |
| | 주류 페어링 전문가와 요리 전문가의 관점을 통합하여 추천합니다. |
| | |
| | Args: |
| | input_text (str): 안주 또는 주류 정보 |
| | input_type (str): 입력 종류 ('안주' 또는 '주류') |
| | situation (str): 상황 또는 분위기 정보 |
| | |
| | Returns: |
| | str: 생성된 페어링 정보 |
| | """ |
| |
|
| | SYSTEM_PROMPT = f""" |
| | **주류 페어링 마스터입니다!** 🍇🎉 |
| | |
| | 입력하신 {input_type} '{input_text}'에 어울리는 최고의 페어링을 찾아드리겠습니다. |
| | '{situation}' 상황에 딱 맞는, 최상의 미식 경험을 위한 맞춤 추천을 제공합니다. |
| | |
| | 다음과 같은 요소들을 종합적으로 고려하여 최적의 페어링을 제안합니다. |
| | |
| | * **상황 및 분위기:** '{situation}'에 맞춰 로맨틱한 분위기, 활기찬 분위기, 편안한 분위기 등을 고려합니다. |
| | * **미식적 조화:** 안주와 주류의 맛, 향, 질감, 온도의 조화를 분석하여 서로의 풍미를 상승시키는 조합을 찾습니다. |
| | * **창의적인 페어링:** 뻔한 조합 대신 예상치 못한 조합을 제안하여 새로운 미식 경험을 선사합니다. |
| | * **한국인의 취향:** 한국인의 입맛과 선호도를 고려한 맞춤 추천을 제공합니다. |
| | * **전문가의 팁:** 안주 조리 방법, 주류 서빙 온도, 페어링을 더욱 즐겁게 만드는 팁 등 전문가의 팁을 제공합니다. |
| | * **다양한 선택지:** 최소 4가지 이상의 다양한 페어링을 추천합니다. |
| | * **상세한 설명:** 각 페어링에 대한 추천 이유와 함께 안주와 주류에 대한 자세한 정보 (종류, 재료, 맛, 향, 질감, 온도, 원산지, 제조법, 추천 점수 등) 를 제공합니다. |
| | |
| | **페어링 구성 요소:** |
| | 1. 추천 주류/안주 소개 (요리/주류 정보 포함) |
| | 2. 맛과 향, 질감, 온도 설명 |
| | 3. 추천 이유 (상황/분위기, 미식적 조화, 창의성, 한국인 취향 고려) |
| | 4. 추가 페어링 제안 (대체 가능한 안주/주류, 곁들임 메뉴 등) |
| | 5. 추천 점수 (10점 만점) |
| | |
| | **입력 종류:** {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) |
| |
|
| | |
| | st.set_page_config( |
| | page_title="주류 페어링 마스터", |
| | page_icon="🍇", |
| | layout="centered", |
| | initial_sidebar_state="expanded", |
| | ) |
| |
|
| | colored_header( |
| | label="🍇 주류 페어링 마스터", |
| | description="🍻 안주 또는 주류를 입력하시면 최고의 페어링을 찾아드립니다. 상황과 분위기에 맞는 완벽한 조합을 경험해보세요!", |
| | color_name="red-70", |
| | ) |
| |
|
| | add_vertical_space(1) |
| |
|
| | |
| | st.sidebar.markdown("## 📝 입력 정보") |
| |
|
| | |
| | tabs = st.sidebar.tabs(["🍝 안주 입력", "🍇 주류 입력"]) |
| |
|
| | with tabs[0]: |
| | st.markdown("#### 안주를 입력해 주세요:") |
| | input_text_anjoo = st.text_input("예: 한우 스테이크, 모듬 사시미, 팟타이 등", key="input_text_anjoo") |
| |
|
| | with tabs[1]: |
| | st.markdown("#### 주류를 입력해 주세요:") |
| | input_text_liquor = st.text_input("예: 싱글 몰트 위스키, 드라이 로제 와인, 수제 맥주 등", key="input_text_liquor") |
| |
|
| | |
| | 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_anjoo else "주류" |
| | input_text = st.session_state.input_text_anjoo if st.session_state.input_text_anjoo else st.session_state.input_text_liquor |
| | 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("안주 또는 주류를 입력해주세요.") |
| |
|
| | |
| | add_vertical_space(2) |
| | with st.expander("📜 주류 페어링 마스터 FAQ"): |
| | st.markdown( |
| | """ |
| | **주류 페어링 마스터에 오신 것을 환영합니다!** 🎉 |
| | |
| | 이 앱은 단순히 안주와 주류를 매칭하는 것을 넘어, **미식의 즐거움을 극대화**하는 것을 목표로 합니다. |
| | 주류 페어링 전문가와 요리 전문가의 노하우를 담아, **상황과 분위기에 맞는 완벽한 페어링**을 제안합니다. |
| | 특별한 날, 소중한 사람들과의 만남, 혹은 혼자만의 여유로운 시간을 더욱 풍요롭게 만들어보세요! |
| | |
| | --- |
| | |
| | **Q1: 어떤 상황에 페어링 추천을 받을 수 있나요?** |
| | |
| | A: **모든 상황**에 맞춰 페어링을 추천해 드립니다! 예를 들어: |
| | * **로맨틱한 데이트:** 와인, 샴페인과 어울리는 고급 안주 |
| | * **친구들과의 활기찬 모임:** 맥주, 소주와 잘 어울리는 캐주얼한 안주 |
| | * **가족과의 저녁 식사:** 전통주, 막걸리와 함께 즐기는 푸짐한 한식 요리 |
| | * **혼술:** 위스키, 사케와 함께 깊은 풍미를 즐길 수 있는 안주 |
| | * **캠핑/바비큐:** 야외에서 즐기기 좋은 간편한 안주와 주류 |
| | * **기념일/파티:** 특별한 날을 위한 화려하고 고급스러운 페어링 |
| | * **비오는 날:** 따뜻한 국물 요리와 어울리는 전통주, 막걸리 |
| | * **더운 여름날:** 시원한 맥주, 칵테일과 상큼한 안주 |
| | |
| | **Q2: 페어링 추천은 어떻게 이루어지나요?** |
| | |
| | A: 페어링 추천은 다음 요소들을 종합적으로 고려하여 이루어집니다. |
| | * **주류 및 안주 정보:** 맛, 향, 질감, 온도, 요리 방법, 재료 등 |
| | * **상황 및 분위기:** 로맨틱, 캐주얼, 격식, 파티 등 |
| | * **한국인의 취향:** 보편적인 선호도 및 개인의 취향 |
| | * **전문가의 창의성:** 독창적이고 새로운 페어링 제안 |
| | * **미식적 조화:** 서로의 풍미를 증폭시키는 최적의 조합 |
| | |
| | **Q3: 추천 점수는 어떻게 매겨지나요?** |
| | |
| | A: 추천 점수는 10점 만점으로, 다음과 같은 기준에 따라 평가됩니다. |
| | * **맛의 조화:** 주류와 안주의 맛이 얼마나 잘 어울리는지 |
| | * **향의 조화:** 주류와 안주의 향이 서로를 보완하는지 |
| | * **질감의 조화:** 주류와 안주의 질감이 얼마나 잘 어울리는지 |
| | * **상황 적합성:** 해당 상황과 분위기에 얼마나 적합한지 |
| | * **창의성:** 얼마나 독창적이고 새로운 페어링인지 |
| | * **한국인 취향 부합도:** 한국인의 일반적인 입맛에 얼마나 잘 맞는지 |
| | |
| | **Q4: 추천 결과 외에 다른 정보도 얻을 수 있나요?** |
| | |
| | A: 추천 결과와 함께 다음과 같은 추가 정보를 제공합니다. |
| | * **요리/주류 상세 정보:** 안주의 요리 방법, 주재료, 소스, 주류의 종류, 제조법, 알코올 도수 등 |
| | * **추천 이유:** 상황/분위기, 맛, 향, 질감 등을 고려한 상세한 설명 |
| | * **추가 페어링 제안:** 대체 가능한 안주/주류, 곁들임 메뉴 등 |
| | |
| | **Q5: 지속적으로 업데이트되나요?** |
| | |
| | A: 네, 주류 페어링 마스터는 사용자 피드백과 최신 트렌드를 반영하여 **지속적으로 업데이트**될 예정입니다. |
| | 새로운 안주, 주류, 페어링 조합이 계속 추가될 것이며, 더욱 정확하고 만족스러운 추천을 제공하기 위해 노력하겠습니다. |
| | |
| | --- |
| | |
| | **주류 페어링 마스터와 함께 최고의 미식 경험을 즐겨보세요!** 🥂 |
| | """, |
| | ) |