File size: 9,468 Bytes
1d355ad
fabb74d
bf63def
22032f3
bf63def
 
10238c2
1d355ad
bf63def
22032f3
 
fabb74d
 
65e9b21
b806d26
49463e6
6c63571
fabb74d
 
 
 
b008b72
fabb74d
 
 
d83f187
fabb74d
10238c2
fabb74d
217a78d
1b9c391
b0bb7eb
 
 
2a3b612
b63c216
e4a855b
2a3b612
b63c216
2a3b612
b63c216
b0bb7eb
 
 
b63c216
b0bb7eb
b63c216
b0bb7eb
 
e4a855b
2a3b612
77a5ad0
b0bb7eb
 
b806d26
b0bb7eb
77a5ad0
b806d26
2a3b612
b806d26
 
2a3b612
b806d26
 
 
 
fabb74d
 
 
 
b806d26
 
940b028
bf63def
42a90bb
b806d26
 
42a90bb
 
 
 
bf63def
b806d26
 
 
39688bd
03d0703
bf63def
 
a9008b5
b806d26
a9008b5
b806d26
ddb34b4
42a90bb
 
10238c2
12bb1b9
42a90bb
 
10238c2
12bb1b9
42a90bb
b806d26
a9008b5
c70efbb
d83f187
f2b5a15
b806d26
bf63def
 
 
 
42a90bb
f2b5a15
12bb1b9
 
f2b5a15
b806d26
 
f2b5a15
 
 
 
 
 
 
 
 
 
 
 
42a90bb
 
0f33047
b806d26
 
0f33047
c9444aa
0f33047
 
 
c9444aa
0f33047
c9444aa
0f33047
c9444aa
0f33047
 
 
 
 
 
 
c9444aa
0f33047
c9444aa
0f33047
 
 
 
 
 
 
 
 
c9444aa
0f33047
c9444aa
0f33047
 
 
 
c9444aa
0f33047
c9444aa
0f33047
 
c9444aa
0f33047
c9444aa
0f33047
c9444aa
0f33047
afbd75c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
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. 네, **최신 트렌드를 반영**하여 지속적으로 업데이트될 예정입니다.
            새로운 티와 다과 정보, 다양한 페어링 조합, 전문가의 팁 등을 추가하여 더욱 풍부하고 만족스러운 티타임 경험을 제공하겠습니다.
      
        ---
        
        **티 페어링 마스터와 함께 향긋한 티타임을 즐겨보세요!** ☕
        
        """,
)