ll7098ll commited on
Commit
ee8398e
·
verified ·
1 Parent(s): 49463e6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -26
app.py CHANGED
@@ -4,8 +4,7 @@ import streamlit as st
4
  import google.generativeai as genai
5
  from streamlit_extras.colored_header import colored_header
6
  from streamlit_extras.add_vertical_space import add_vertical_space
7
- import markdown
8
- from streamlit_extras.stoggle import stoggle # 추가된 라이브러리
9
 
10
  # Google Gemini API Key 설정
11
  genai.configure(api_key=os.environ["GEMINI_API_KEY"])
@@ -27,10 +26,13 @@ model = genai.GenerativeModel(
27
  def generate_pairing_recommendation(input_text, input_type, situation):
28
  """
29
  입력받은 안주 또는 주류에 어울리는 페어링 정보를 생성합니다.
 
 
30
  Args:
31
  input_text (str): 안주 또는 주류 정보
32
  input_type (str): 입력 종류 ('안주' 또는 '주류')
33
  situation (str): 상황 또는 분위기 정보
 
34
  Returns:
35
  str: 생성된 페어링 정보
36
  """
@@ -38,13 +40,14 @@ def generate_pairing_recommendation(input_text, input_type, situation):
38
  SYSTEM_PROMPT = f"""
39
  당신은 주류 페어링 전문가입니다.
40
  사용자가 안주 또는 주류를 입력하면, 상황/분위기: {situation}를 고려하여 해당 안주에 어울리는 주류 또는 해당 주류에 어울리는 안주를 구체적으로 설명해주세요. 또한 각각의 특징, 맛, 향, 그리고 추천 이유를 포함하여 상세하게 작성해주세요.
41
- 한국인의 취향에 맞는 주류나 안주를 추천해주세요. 추천 점수 10점 만점으로 표현해주세요. 주류나 안주 추천은 종류별로 다양하게 해주세요.(4가지 이상)
42
  상황이나 분위기를 반드시 고려하여 최적의 페어링을 추천해주세요. 상황이나 분위기에 맞춘 특별한 추천 이유를 추가하고, 해당 상황에 적합한 맛과 향의 요소를 강조해주세요.
43
- 다음은 페어링 추천에 필한 정보입니다.
 
44
  **페어링 구성 요소:**
45
  1. 추천 주류/안주 소개
46
  2. 맛과 향 설명
47
- 3. 추천 이유
48
  4. 추가 추천 페어링
49
  5. 추천 점수 (10점 만점)
50
  """
@@ -53,7 +56,7 @@ def generate_pairing_recommendation(input_text, input_type, situation):
53
  SYSTEM_PROMPT,
54
  f"**입력 종류:** {input_type}",
55
  f"**입력 내용:** {input_text}",
56
- "**추천 페어링:**",
57
  ]
58
 
59
  response = model.generate_content(prompt, stream=True)
@@ -61,8 +64,15 @@ def generate_pairing_recommendation(input_text, input_type, situation):
61
  for token in response:
62
  chunk = token.text
63
  collected_text += chunk
64
- yield collected_text # 실시간 출력을 위해 yield 사용
65
- time.sleep(0.03) # 출력 속도 조절
 
 
 
 
 
 
 
66
 
67
  # Streamlit Interface
68
  st.set_page_config(
@@ -83,40 +93,46 @@ add_vertical_space(1)
83
  # 사이드바 입력 영역
84
  st.sidebar.markdown("## 🛌️ 입력 정보")
85
 
86
- # 사용자 입력 영역 (사이드바로 이동)
87
  tabs = st.sidebar.tabs(["🍝 안주 입력", "🍇 주류 입력"])
88
 
89
  with tabs[0]:
90
  st.markdown("#### 안주를 입력해 주세요:")
91
- input_text_anjoo = st.text_input("예: 치킨, 육회, 치즈 플래터 등")
92
 
93
  with tabs[1]:
94
  st.markdown("#### 주류를 입력해 주세요:")
95
- input_text_liquor = st.text_input("예: 맥주, 와인, 소주 등")
96
-
97
- input_type = "안주" if input_text_anjoo else "주류"
98
- input_text = input_text_anjoo if input_text_anjoo else input_text_liquor
99
 
100
- # 상황 또는 분위기 입력 (사이드바로 이동)
101
  st.sidebar.markdown("#### 상황이나 분위기를 입력해 주세요:")
102
- situation = st.sidebar.text_area("예: 친구들과의 모임, 로맨틱한 데이트, 가족과의 저녁 식사 등", height=100)
103
 
 
104
  generate_button = st.sidebar.button("🍻 페어링 추천 받기")
105
 
106
  # 출력 영역 정의
107
  output_area = st.empty()
108
 
109
  # 추천 결과 생성 및 출력
110
- if generate_button and input_text:
111
- output_text = ""
112
- output_area.markdown(output_text)
113
- try:
114
- with st.spinner("페어링 정보를 생성 중입니다... 잠시만 기다려 주세요!"):
115
- for partial_output in generate_pairing_recommendation(input_text, input_type, situation):
116
- output_text = partial_output
117
- output_area.markdown(output_text)
118
- except Exception as e:
119
- st.error(f"오류가 했습니다: {str(e)}")
 
 
 
 
 
 
 
 
120
 
121
  # 추가 정보 및 FAQ
122
  add_vertical_space(2)
 
4
  import google.generativeai as genai
5
  from streamlit_extras.colored_header import colored_header
6
  from streamlit_extras.add_vertical_space import add_vertical_space
7
+ from streamlit_extras.stoggle import stoggle
 
8
 
9
  # Google Gemini API Key 설정
10
  genai.configure(api_key=os.environ["GEMINI_API_KEY"])
 
26
  def generate_pairing_recommendation(input_text, input_type, situation):
27
  """
28
  입력받은 안주 또는 주류에 어울리는 페어링 정보를 생성합니다.
29
+ 상황/분위기를 고려하여 한국인의 취향에 맞는 주류나 안주를 추천합니다.
30
+
31
  Args:
32
  input_text (str): 안주 또는 주류 정보
33
  input_type (str): 입력 종류 ('안주' 또는 '주류')
34
  situation (str): 상황 또는 분위기 정보
35
+
36
  Returns:
37
  str: 생성된 페어링 정보
38
  """
 
40
  SYSTEM_PROMPT = f"""
41
  당신은 주류 페어링 전문가입니다.
42
  사용자가 안주 또는 주류를 입력하면, 상황/분위기: {situation}를 고려하여 해당 안주에 어울리는 주류 또는 해당 주류에 어울리는 안주를 구체적으로 설명해주세요. 또한 각각의 특징, 맛, 향, 그리고 추천 이유를 포함하여 상세하게 작성해주세요.
43
+ 한국인의 취향에 맞는 주류나 안주를 추천해주세요. 추천 점수 10점 만점으로 표현해주세요. 주류나 안주 추천은 종류별로 다양하게 해주세요.(4가지 이상)
44
  상황이나 분위기를 반드시 고려하여 최적의 페어링을 추천해주세요. 상황이나 분위기에 맞춘 특별한 추천 이유를 추가하고, 해당 상황에 적합한 맛과 향의 요소를 강조해주세요.
45
+ 예를 들어, '{situation}' 상황이라면, 더욱 즐거운 시간을 보낼 수 있도록 특별히 어울리는 페어링 추천해주세요.
46
+
47
  **페어링 구성 요소:**
48
  1. 추천 주류/안주 소개
49
  2. 맛과 향 설명
50
+ 3. 추천 이유 (상황/분위기 고려)
51
  4. 추가 추천 페어링
52
  5. 추천 점수 (10점 만점)
53
  """
 
56
  SYSTEM_PROMPT,
57
  f"**입력 종류:** {input_type}",
58
  f"**입력 내용:** {input_text}",
59
+ "**추천 페어링:**",
60
  ]
61
 
62
  response = model.generate_content(prompt, stream=True)
 
64
  for token in response:
65
  chunk = token.text
66
  collected_text += chunk
67
+ yield collected_text
68
+ time.sleep(0.03)
69
+
70
+ # 입력 필드 초기화 함수
71
+ def clear_input_fields():
72
+ """입력 필드를 초기화합니다."""
73
+ st.session_state.input_text_anjoo = ""
74
+ st.session_state.input_text_liquor = ""
75
+ st.session_state.situation = ""
76
 
77
  # Streamlit Interface
78
  st.set_page_config(
 
93
  # 사이드바 입력 영역
94
  st.sidebar.markdown("## 🛌️ 입력 정보")
95
 
96
+ # 사용자 입력 영역 (사이드바 탭으분리)
97
  tabs = st.sidebar.tabs(["🍝 안주 입력", "🍇 주류 입력"])
98
 
99
  with tabs[0]:
100
  st.markdown("#### 안주를 입력해 주세요:")
101
+ input_text_anjoo = st.text_input("예: 치킨, 육회, 치즈 플래터 등", key="input_text_anjoo") # key 추가
102
 
103
  with tabs[1]:
104
  st.markdown("#### 주류를 입력해 주세요:")
105
+ input_text_liquor = st.text_input("예: 맥주, 와인, 소주 등", key="input_text_liquor") # key 추가
 
 
 
106
 
107
+ # 상황 또는 분위기 입력 (사이드바)
108
  st.sidebar.markdown("#### 상황이나 분위기를 입력해 주세요:")
109
+ situation = st.sidebar.text_area("예: 친구들과의 모임, 로맨틱한 데이트, 가족과의 저녁 식사 등", height=100, key="situation") # key 추가
110
 
111
+ # 페어링 추천 받��� 버튼
112
  generate_button = st.sidebar.button("🍻 페어링 추천 받기")
113
 
114
  # 출력 영역 정의
115
  output_area = st.empty()
116
 
117
  # 추천 결과 생성 및 출력
118
+ if generate_button:
119
+ input_type = "안주" if st.session_state.input_text_anjoo else "주류"
120
+ input_text = st.session_state.input_text_anjoo if st.session_state.input_text_anjoo else st.session_state.input_text_liquor
121
+ situation = st.session_state.situation
122
+
123
+ if input_text: # 입력값이 있을 때만 추천 시작
124
+ output_text = ""
125
+ output_area.markdown(output_text)
126
+ try:
127
+ with st.spinner("페어링 정보를 성 중입니다... 잠시만 기다려 주세요!"):
128
+ for partial_output in generate_pairing_recommendation(input_text, input_type, situation):
129
+ output_text = partial_output
130
+ output_area.markdown(output_text)
131
+ clear_input_fields() # 입력 필드 초기화
132
+ except Exception as e:
133
+ st.error(f"오류가 발생했습니다: {str(e)}")
134
+ else:
135
+ st.warning("안주 또는 주류를 입력해주세요.")
136
 
137
  # 추가 정보 및 FAQ
138
  add_vertical_space(2)