mlo0ollm commited on
Commit
7966cf6
โ€ข
1 Parent(s): e08b530

edit UI for small device & refactor major func

Browse files
Files changed (3) hide show
  1. .env +1 -0
  2. .gitignore +1 -0
  3. app.py +12 -10
.env ADDED
@@ -0,0 +1 @@
 
 
1
+ OPENAI_API_KEY = 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
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ .env
app.py CHANGED
@@ -4,7 +4,7 @@ import streamlit as st
4
  import openai
5
  import os
6
  import sys
7
- from gpt_based_function import gpt_keyword_highlighter, gpt_text_naturalizer, gpt_explanation_generator, gpt_easier_text_generator, gpt_rater
8
  import concurrent.futures
9
  from tqdm import tqdm
10
 
@@ -13,8 +13,7 @@ from tqdm import tqdm
13
  # os.chdir(current_path)
14
  # sys.path.append(current_path)
15
 
16
- # OpenAI API ์„ค์ • (ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ ์ฝ์–ด์˜ด)
17
- openai.api_key = os.getenv("OPENAI_API_KEY") # ์‹ค์ œ ์ฝ”๋“œ์—์„œ ์ฃผ์„ ํ•ด์ œ
18
  st.set_page_config(layout="wide")
19
 
20
  user_text = """๋ฏผ์ฃผ์ฃผ์˜ ์‚ฌํšŒ๋Š” ๊ตญ๋ฏผ์ด ์ •์น˜์— ์ฐธ์—ฌํ•  ๊ถŒ๋ฆฌ๋ฅผ ๋ณด์žฅํ•œ๋‹ค. ๊ทธ๋Ÿฌํ•œ ๊ถŒ๋ฆฌ๋ฅผ ์ฐธ์ •๊ถŒ์ด๋ผ ํ•˜๋Š”๋ฐ, ์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ โ€˜์„ ๊ฑฐโ€™๋กœ ์‹คํ˜„๋œ๋‹ค. ์„ ๊ฑฐ๋Š” ์‚ฌํšŒ ์ง‘๋‹จ์˜ ๋Œ€ํ‘œ์ž๋‚˜ ๊ณต์ง์ž๋ฅผ ์„ ์ถœํ•˜์—ฌ ๊ทธ๋“ค์—๊ฒŒ ๋Œ€ํ‘œ์„ฑ์„ ๋ถ€์—ฌํ•˜๋Š” ํ–‰์œ„์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋†’์€ ํˆฌํ‘œ์œจ์€ ๋ฏผ์ฃผ์ฃผ์˜์˜ ์ •๋‹น์„ฑ ํ™•๋ณด์™€ ๊นŠ์€ ๊ด€๋ จ์ด ์žˆ๋‹ค.
@@ -22,10 +21,13 @@ user_text = """๋ฏผ์ฃผ์ฃผ์˜ ์‚ฌํšŒ๋Š” ๊ตญ๋ฏผ์ด ์ •์น˜์— ์ฐธ์—ฌํ•  ๊ถŒ๋ฆฌ๋ฅผ
22
  ์˜๋ฌด ํˆฌํ‘œ์ œ๋ฅผ ๋„์ž…ํ•˜์ž๋Š” ์ธก์€ ๋‚ฎ์€ ํˆฌํ‘œ์œจ๋กœ ํˆฌํ‘œ ๊ฒฐ๊ณผ์˜ ์ •๋‹น์„ฑ์„ ํ™•๋ณดํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋งค์šฐ ์‹ฌ๊ฐํ•˜๋‹ค๊ณ  ์ฃผ์žฅํ•œ๋‹ค. ๋˜ ์˜๋ฌด ํˆฌํ‘œ์ œ์˜ ๊ฐ•์ œ์„ฑ๊ณผ ๋ฒ•์  ์ œ์žฌ๊ฐ€ ํˆฌํ‘œ์œจ์„ ๋†’์ด๋ฏ€๋กœ ํˆฌํ‘œ์œจ์ด ๋‚ฎ์•„์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ณธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ตญ๋ฏผ ๋Œ€๋ถ€๋ถ„์ด ํˆฌํ‘œ์— ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜๋ฉด ์ •์น˜์ธ๋“ค์ด ๋ชจ๋“  ๊ณ„์ธต์˜ ์ง€์ง€๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ •์ฑ… ๊ฒฝ์Ÿ๋ ฅ์„ ๋†’์ด๋ ค ํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์ •์น˜ ์†Œ์™ธ ๊ณ„์ธต์— ๋”์šฑ ๊ด€์‹ฌ์„ ์Ÿ๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ด์•ผ๊ธฐํ•œ๋‹ค.
23
  ๋ฐ˜๋ฉด ์˜๋ฌด ํˆฌํ‘œ์ œ์— ๋ฐ˜๋Œ€ํ•˜๋Š” ์ธก์€ ํ˜„์žฌ ์šฐ๋ฆฌ๋‚˜๋ผ์˜ ํˆฌํ‘œ์œจ์ด ์ •์น˜ ์ง€๋„์ž๋“ค์˜ ๋Œ€ํ‘œ์„ฑ์„ ํ›ผ์†ํ•  ๋งŒํผ ์‹ฌ๊ฐํ•œ ์ƒํ™ฉ์€ ์•„๋‹ˆ๋ผ๊ณ  ์ฃผ์žฅํ•œ๋‹ค. ๋˜ ํˆฌํ‘œ์œจ์„ ๋†’์ด๋Š” ๊ฒƒ๋ณด๋‹ค ๊ตญ๋ฏผ์˜ ์‹ ๋ขฐ๋ฅผ ํšŒ๋ณตํ•˜๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ•˜๊ณ , ์‹œ๋ฏผ ๊ต์œก์ด๋‚˜ ๋ชจ์˜ ํˆฌํ‘œ ๊ต์œก ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ๋„ ํˆฌํ‘œ์œจ ์ƒ์Šน์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉฐ ์˜๋ฌด ํˆฌํ‘œ์ œ์˜ ๋„์ž…๋งŒ์ด ํˆฌํ‘œ์œจ์ด๋‚˜ ์ •์น˜์  ๊ด€์‹ฌ์„ ๋†’์ด๋Š” ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์€ ์•„๋‹ˆ๋ผ๊ณ  ์ด์•ผ๊ธฐํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜๋ฌด ํˆฌํ‘œ์ œ๋ฅผ ๋„์ž…ํ•˜๋ฉด, ์„ ์ถœ๋œ ์ •์น˜์ธ๋“ค์ด ๋†’์€ ํˆฌํ‘œ์œจ์„ ํ•‘๊ณ„๋กœ ์•ˆํ•˜๋ฌด์ธ์˜ ํƒœ๋„๋ฅผ ๊ฐ–๋Š” ๋ถ€์ž‘์šฉ์ด ์ƒ๊ธด๋‹ค๋“ ๊ฐ€ ํ›„๋ณด์ž๋ฅผ ์ž˜ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์—์„œ ํˆฌํ‘œํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•˜์—ฌ ๊ตญ๋ฏผ์˜ ๋œป์ด ์˜คํžˆ๋ ค ์™œ๊ณก๋  ์ˆ˜ ์žˆ๋‹ค๋ฉฐ ์šฐ๋ ค์˜ ๋ชฉ์†Œ๋ฆฌ๋ฅผ ๋‚ด๊ณ  ์žˆ๋‹ค."""
24
 
 
 
25
  user_text_paragraphs = user_text.split("\n") #๋ฌธ๋‹จ๋ณ„๋กœ ์ชผ๊ฐœ๊ธฐ
26
 
27
  is_easier_button_pressed = [False]*len(user_text_paragraphs)
28
 
 
29
  def run(list_sum):
30
  with concurrent.futures.ThreadPoolExecutor() as executor:
31
  results = list(tqdm(executor.map(gpt_keyword_highlighter, list_sum), total=len(list_sum)))
@@ -80,10 +82,10 @@ def display_preset_func_btns(col):
80
  # ๋ฒ„ํŠผ row
81
  cols = st.columns(2)
82
  with cols[0]:
83
- btn_gpt_keyword_func = st.button("ํ‚ค์›Œ๋“œ๋ฅผ ์ฐพ์•„์ค˜")
84
  if btn_gpt_keyword_func and st.session_state.points > 0: # ํฌ์ธํŠธ ์ฒดํฌ
85
  update_points(-1) # ํฌ์ธํŠธ ๊ฐ์†Œ
86
- st.session_state.history.append(["ํ‚ค์›Œ๋“œ๋ฅผ ์ฐพ์•„์ค˜", -1, st.session_state.points])
87
 
88
  global is_easier_button_pressed
89
  is_easier_button_pressed = [True]*len(user_text_paragraphs)
@@ -108,10 +110,10 @@ def display_preset_func_btns(col):
108
 
109
  with cols[1]:
110
  global btn_gpt_easier_text_func
111
- btn_gpt_easier_text_func = st.button("์‰ฌ์šด ํ‘œํ˜„์œผ๋กœ ๋ฐ”๊ฟ”์ค˜")
112
  if btn_gpt_easier_text_func and st.session_state.points > 0: # ํฌ์ธํŠธ ์ฒดํฌ
113
  update_points(-1) # ํฌ์ธํŠธ ๊ฐ์†Œ
114
- st.session_state.history.append(["์‰ฌ์šด ํ‘œํ˜„์œผ๋กœ ๋ฐ”๊ฟ”์ค˜", -1, st.session_state.points])
115
 
116
 
117
  # return btn_gpt_keyword_func, btn_gpt_easier_text_func
@@ -188,12 +190,12 @@ def display_qna_with_gpt():
188
  if btn_gpt_easier_text_func and st.session_state.points > 0:
189
  easier_text = gpt_easier_text_generator(user_input)
190
 
191
- # ์‰ฌ์šด ํ‘œํ˜„์œผ๋กœ ๋ฐ”๊ฟ”์ค˜์œผ๋กœ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
192
  st.write(f"์‰ฌ์šด ๊ธ€: {easier_text}")
193
  pass
194
  else:
195
  if st.session_state.points == 0:
196
- st.write("ํฌ์ธํŠธ๊ฐ€ ์—†์–ด์„œ ์‰ฌ์šด ํ‘œํ˜„์œผ๋กœ ๋ฐ”๊ฟ”์ค˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.")
197
  pass
198
 
199
 
@@ -201,7 +203,7 @@ def display_qna_with_gpt():
201
  def main():
202
  st.title("์ฑ—GPT์™€ ํ•จ๊ป˜ ์š”์•ฝํ•˜๊ธฐ")
203
  #ํฌ์ธํŠธ ์‹œ์Šคํ…œ ์„ค๋ช… ์ถ”๊ฐ€
204
- st.sidebar.markdown("ํฌ์ธํŠธ๋Š” 3์ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ, **ํ‚ค์›Œ๋“œ๋ฅผ ์ฐพ์•„์ค˜**, **์‰ฌ์šด ํ‘œํ˜„์œผ๋กœ ๋ฐ”๊ฟ”์ค˜**, **๊ธ€ ๋‹ค๋“ฌ๊ธฐ**๋ฅผ ํ•  ๋•Œ 1์ ์”ฉ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค. **์ถ”๊ฐ€ ์„ค๋ช…**๊ณผ **์ฑ„์ ํ•˜๊ธฐ**๋ฅผ ํ•  ๋•Œ 1์ ์”ฉ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํฌ์ธํŠธ๊ฐ€ 0์ ์ด ๋˜๋ฉด ๋” ์ด์ƒ ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ")
205
 
206
  # col1, col2 = st.columns(2)
207
  display_preset_func_btns(col)
 
4
  import openai
5
  import os
6
  import sys
7
+ from gpt_based_function import gpt_summary_generator, gpt_keyword_highlighter, gpt_text_naturalizer, gpt_explanation_generator, gpt_easier_text_generator, gpt_rater
8
  import concurrent.futures
9
  from tqdm import tqdm
10
 
 
13
  # os.chdir(current_path)
14
  # sys.path.append(current_path)
15
 
16
+ openai.api_key = os.getenv("OPENAI_API_KEY")
 
17
  st.set_page_config(layout="wide")
18
 
19
  user_text = """๋ฏผ์ฃผ์ฃผ์˜ ์‚ฌํšŒ๋Š” ๊ตญ๋ฏผ์ด ์ •์น˜์— ์ฐธ์—ฌํ•  ๊ถŒ๋ฆฌ๋ฅผ ๋ณด์žฅํ•œ๋‹ค. ๊ทธ๋Ÿฌํ•œ ๊ถŒ๋ฆฌ๋ฅผ ์ฐธ์ •๊ถŒ์ด๋ผ ํ•˜๋Š”๋ฐ, ์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ โ€˜์„ ๊ฑฐโ€™๋กœ ์‹คํ˜„๋œ๋‹ค. ์„ ๊ฑฐ๋Š” ์‚ฌํšŒ ์ง‘๋‹จ์˜ ๋Œ€ํ‘œ์ž๋‚˜ ๊ณต์ง์ž๋ฅผ ์„ ์ถœํ•˜์—ฌ ๊ทธ๋“ค์—๊ฒŒ ๋Œ€ํ‘œ์„ฑ์„ ๋ถ€์—ฌํ•˜๋Š” ํ–‰์œ„์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋†’์€ ํˆฌํ‘œ์œจ์€ ๋ฏผ์ฃผ์ฃผ์˜์˜ ์ •๋‹น์„ฑ ํ™•๋ณด์™€ ๊นŠ์€ ๊ด€๋ จ์ด ์žˆ๋‹ค.
 
21
  ์˜๋ฌด ํˆฌํ‘œ์ œ๋ฅผ ๋„์ž…ํ•˜์ž๋Š” ์ธก์€ ๋‚ฎ์€ ํˆฌํ‘œ์œจ๋กœ ํˆฌํ‘œ ๊ฒฐ๊ณผ์˜ ์ •๋‹น์„ฑ์„ ํ™•๋ณดํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋งค์šฐ ์‹ฌ๊ฐํ•˜๋‹ค๊ณ  ์ฃผ์žฅํ•œ๋‹ค. ๋˜ ์˜๋ฌด ํˆฌํ‘œ์ œ์˜ ๊ฐ•์ œ์„ฑ๊ณผ ๋ฒ•์  ์ œ์žฌ๊ฐ€ ํˆฌํ‘œ์œจ์„ ๋†’์ด๋ฏ€๋กœ ํˆฌํ‘œ์œจ์ด ๋‚ฎ์•„์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ณธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ตญ๋ฏผ ๋Œ€๋ถ€๋ถ„์ด ํˆฌํ‘œ์— ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜๋ฉด ์ •์น˜์ธ๋“ค์ด ๋ชจ๋“  ๊ณ„์ธต์˜ ์ง€์ง€๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ •์ฑ… ๊ฒฝ์Ÿ๋ ฅ์„ ๋†’์ด๋ ค ํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์ •์น˜ ์†Œ์™ธ ๊ณ„์ธต์— ๋”์šฑ ๊ด€์‹ฌ์„ ์Ÿ๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ด์•ผ๊ธฐํ•œ๋‹ค.
22
  ๋ฐ˜๋ฉด ์˜๋ฌด ํˆฌํ‘œ์ œ์— ๋ฐ˜๋Œ€ํ•˜๋Š” ์ธก์€ ํ˜„์žฌ ์šฐ๋ฆฌ๋‚˜๋ผ์˜ ํˆฌํ‘œ์œจ์ด ์ •์น˜ ์ง€๋„์ž๋“ค์˜ ๋Œ€ํ‘œ์„ฑ์„ ํ›ผ์†ํ•  ๋งŒํผ ์‹ฌ๊ฐํ•œ ์ƒํ™ฉ์€ ์•„๋‹ˆ๋ผ๊ณ  ์ฃผ์žฅํ•œ๋‹ค. ๋˜ ํˆฌํ‘œ์œจ์„ ๋†’์ด๋Š” ๊ฒƒ๋ณด๋‹ค ๊ตญ๋ฏผ์˜ ์‹ ๋ขฐ๋ฅผ ํšŒ๋ณตํ•˜๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ•˜๊ณ , ์‹œ๋ฏผ ๊ต์œก์ด๋‚˜ ๋ชจ์˜ ํˆฌํ‘œ ๊ต์œก ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ๋„ ํˆฌํ‘œ์œจ ์ƒ์Šน์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉฐ ์˜๋ฌด ํˆฌํ‘œ์ œ์˜ ๋„์ž…๋งŒ์ด ํˆฌํ‘œ์œจ์ด๋‚˜ ์ •์น˜์  ๊ด€์‹ฌ์„ ๋†’์ด๋Š” ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์€ ์•„๋‹ˆ๋ผ๊ณ  ์ด์•ผ๊ธฐํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜๋ฌด ํˆฌํ‘œ์ œ๋ฅผ ๋„์ž…ํ•˜๋ฉด, ์„ ์ถœ๋œ ์ •์น˜์ธ๋“ค์ด ๋†’์€ ํˆฌํ‘œ์œจ์„ ํ•‘๊ณ„๋กœ ์•ˆํ•˜๋ฌด์ธ์˜ ํƒœ๋„๋ฅผ ๊ฐ–๋Š” ๋ถ€์ž‘์šฉ์ด ์ƒ๊ธด๋‹ค๋“ ๊ฐ€ ํ›„๋ณด์ž๋ฅผ ์ž˜ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์—์„œ ํˆฌํ‘œํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•˜์—ฌ ๊ตญ๋ฏผ์˜ ๋œป์ด ์˜คํžˆ๋ ค ์™œ๊ณก๋  ์ˆ˜ ์žˆ๋‹ค๋ฉฐ ์šฐ๋ ค์˜ ๋ชฉ์†Œ๋ฆฌ๋ฅผ ๋‚ด๊ณ  ์žˆ๋‹ค."""
23
 
24
+ # gpt_summary = gpt_summary_generator(user_text)
25
+
26
  user_text_paragraphs = user_text.split("\n") #๋ฌธ๋‹จ๋ณ„๋กœ ์ชผ๊ฐœ๊ธฐ
27
 
28
  is_easier_button_pressed = [False]*len(user_text_paragraphs)
29
 
30
+
31
  def run(list_sum):
32
  with concurrent.futures.ThreadPoolExecutor() as executor:
33
  results = list(tqdm(executor.map(gpt_keyword_highlighter, list_sum), total=len(list_sum)))
 
82
  # ๋ฒ„ํŠผ row
83
  cols = st.columns(2)
84
  with cols[0]:
85
+ btn_gpt_keyword_func = st.button("ํ‚ค์›Œ๋“œ ์ฐพ์•„์ค˜")
86
  if btn_gpt_keyword_func and st.session_state.points > 0: # ํฌ์ธํŠธ ์ฒดํฌ
87
  update_points(-1) # ํฌ์ธํŠธ ๊ฐ์†Œ
88
+ st.session_state.history.append(["ํ‚ค์›Œ๋“œ ์ฐพ์•„์ค˜", -1, st.session_state.points])
89
 
90
  global is_easier_button_pressed
91
  is_easier_button_pressed = [True]*len(user_text_paragraphs)
 
110
 
111
  with cols[1]:
112
  global btn_gpt_easier_text_func
113
+ btn_gpt_easier_text_func = st.button("์‰ฝ๊ฒŒ ๋‹ค์‹œ ์•Œ๋ ค์ค˜")
114
  if btn_gpt_easier_text_func and st.session_state.points > 0: # ํฌ์ธํŠธ ์ฒดํฌ
115
  update_points(-1) # ํฌ์ธํŠธ ๊ฐ์†Œ
116
+ st.session_state.history.append(["์‰ฝ๊ฒŒ ๋‹ค์‹œ ์•Œ๋ ค์ค˜", -1, st.session_state.points])
117
 
118
 
119
  # return btn_gpt_keyword_func, btn_gpt_easier_text_func
 
190
  if btn_gpt_easier_text_func and st.session_state.points > 0:
191
  easier_text = gpt_easier_text_generator(user_input)
192
 
193
+ # ์‰ฝ๊ฒŒ ๋‹ค์‹œ ์•Œ๋ ค์ค˜์œผ๋กœ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
194
  st.write(f"์‰ฌ์šด ๊ธ€: {easier_text}")
195
  pass
196
  else:
197
  if st.session_state.points == 0:
198
+ st.write("ํฌ์ธํŠธ๊ฐ€ ์—†์–ด์„œ ์‰ฝ๊ฒŒ ๋‹ค์‹œ ์•Œ๋ ค์ค˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.")
199
  pass
200
 
201
 
 
203
  def main():
204
  st.title("์ฑ—GPT์™€ ํ•จ๊ป˜ ์š”์•ฝํ•˜๊ธฐ")
205
  #ํฌ์ธํŠธ ์‹œ์Šคํ…œ ์„ค๋ช… ์ถ”๊ฐ€
206
+ st.sidebar.markdown("ํฌ์ธํŠธ๋Š” 3์ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ, **ํ‚ค์›Œ๋“œ ์ฐพ์•„์ค˜**, **์‰ฝ๊ฒŒ ๋‹ค์‹œ ์•Œ๋ ค์ค˜**, **๊ธ€ ๋‹ค๋“ฌ๊ธฐ**๋ฅผ ํ•  ๋•Œ 1์ ์”ฉ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค. **์ถ”๊ฐ€ ์„ค๋ช…**๊ณผ **์ฑ„์ ํ•˜๊ธฐ**๋ฅผ ํ•  ๋•Œ 1์ ์”ฉ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํฌ์ธํŠธ๊ฐ€ 0์ ์ด ๋˜๋ฉด ๋” ์ด์ƒ ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ")
207
 
208
  # col1, col2 = st.columns(2)
209
  display_preset_func_btns(col)