Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -5,6 +5,98 @@ import re
|
|
5 |
from huggingface_hub import InferenceClient
|
6 |
from fpdf import FPDF
|
7 |
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
def create_client(model_name):
|
10 |
return InferenceClient(model_name, token=os.getenv("HF_TOKEN"))
|
@@ -41,6 +133,22 @@ def generate_blog_post(category, style, topic, references1, references2, referen
|
|
41 |
formatted_text = modified_text.replace('\n', '\n\n')
|
42 |
return formatted_text
|
43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
def get_title_prompt(category):
|
45 |
if (category == "๊ณ ๊ฐ๋ฐ์ํ"):
|
46 |
return """
|
@@ -143,8 +251,7 @@ def get_style_prompt(style):
|
|
143 |
- ์น๊ทผํ๊ณ ๊ฒฉ๋ คํ๋ ํค์ผ๋ก ๋ง๋ฌด๋ฆฌ
|
144 |
- ๋ค์ ํฌ์คํ
์ ๋ํ ๊ธฐ๋๊ฐ ์ ๋ฐ
|
145 |
์ฃผ์์ฌํญ: ๋๋ฌด ๊ฐ๋ฒผ์ด ํค์ ์ง์ํ๊ณ , ์ฃผ์ ์ ์ค์์ฑ์ ํด์น์ง ์๋ ์ ์์ ์น๊ทผํจ ์ ์ง
|
146 |
-
์์:
|
147 |
-
"์ฌ๋ฌ๋ถ, ์ค๋ ํ๋ฃจ๋ ์ด๋ ์
จ๋์? ๐ ์ ๋ ์ค๋ ์ฌ๋ฏธ์๋ ๊ฒฝํ์ ํ์ด์. ๋ฐ๋ก '๋ฏธ๋๋ฉ ๋ผ์ดํ'์ ๋์ ํด๋ณธ ๊ฑด๋ฐ์. ์ฒ์์๋ ์ข ๋ง๋งํ์ง๋ง, ์๊ฐ๋ณด๋ค ์ฆ๊ฑฐ์ด ๊ฒฝํ์ด์์ด์! ์ฌ๋ฌ๋ถ๋ ํ๋ฒ ๋ฐ๋ผํด๋ณด์๊ฒ ์ด์? ์ ๊ฐ ์๊ฒ ๋ ๊ฟํ๋ค์ ํ๋ํ๋ ์๋ ค๋๋ฆด๊ฒ์.
|
148 |
""",
|
149 |
"์ผ๋ฐ": """
|
150 |
#์ผ๋ฐ์ ์ธ ๋ธ๋ก๊ทธ ํฌ์คํ
์คํ์ผ ๊ฐ์ด๋
|
@@ -174,16 +281,15 @@ def get_style_prompt(style):
|
|
174 |
6. ๋ง๋ฌด๋ฆฌ
|
175 |
- ์ฃผ์ ๋ด์ฉ ๊ฐ๋จํ ์์ฝ
|
176 |
- ์ถ๊ฐ ์ ๋ณด์ ๋ํ ์๋ด ์ ๊ณต
|
177 |
-
|
178 |
-
์์:
|
179 |
-
"์ต๊ทผ ํ๊ฒฝ ๋ฌธ์ ๊ฐ ๋๋๋๋ฉด์ '์ ๋ก ์จ์ด์คํธ' ๋ผ์ดํ์คํ์ผ์ ๋ํ ๊ด์ฌ์ด ๋์์ง๊ณ ์์ต๋๋ค. ์ ๋ก ์จ์ด์คํธ๋ ์ผ์์ํ์์ ๋ฐ์ํ๋ ์ฐ๋ ๊ธฐ๋ฅผ ์ต์ํํ๋ ์ํ ๋ฐฉ์์ ๋งํฉ๋๋ค. ์ด ๊ธ์์๋ ์ ๋ก ์จ์ด์คํธ์ ๊ฐ๋
, ์ค์ฒ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ๊ทธ ํจ๊ณผ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ๋จผ์ ์ ๋ก ์จ์ด์คํธ์ ์ ์๋ถํฐ ์ดํด๋ณด๋ฉด...
|
180 |
""",
|
181 |
"์ ๋ฌธ์ ์ธ": """
|
182 |
#์ ๋ฌธ์ ์ธ ๋ธ๋ก๊ทธ ํฌ์คํ
์คํ์ผ ๊ฐ์ด๋
|
183 |
|
184 |
1. ํค๊ณผ ๊ตฌ์กฐ
|
185 |
- ๊ณต์์ ์ด๊ณ ํ์ ์ ์ธ ํค ์ฌ์ฉ
|
186 |
-
- ๊ฐ๊ด์ ์ด๊ณ ๋ถ์์ ์ธ ์ ๊ทผ ์ ์ง
|
187 |
- ๋ช
ํํ ์๋ก , ๋ณธ๋ก , ๊ฒฐ๋ก ๊ตฌ์กฐ
|
188 |
- ์ฒด๊ณ์ ์ธ ๋
ผ์ ์ ๊ฐ
|
189 |
- ์ธ๋ถ ์น์
์ ์ํ ๋ช
ํํ ์์ ๋ชฉ ์ฌ์ฉ
|
@@ -208,9 +314,8 @@ def get_style_prompt(style):
|
|
208 |
5. ๋ง๋ฌด๋ฆฌ
|
209 |
- ํต์ฌ ๋
ผ์ ์ฌ๊ฐ์กฐ
|
210 |
- ํฅํ ์ฐ๊ตฌ ๋ฐฉํฅ์ด๋ ์ค๋ฌด์ ํจ์ ์ ์
|
211 |
-
|
212 |
-
์์:
|
213 |
-
"๋ณธ ์ฐ๊ตฌ์์๋ ์ธ๊ณต์ง๋ฅ(AI)์ ์ค๋ฆฌ์ ํจ์์ ๋ํด ๊ณ ์ฐฐํ๋ค. ํนํ, ์์จ์ฃผํ ์๋์ฐจ์ ์์ฌ๊ฒฐ์ ์๊ณ ๋ฆฌ์ฆ์์ ๋ฐ์ํ ์ ์๋ ์ค๋ฆฌ์ ๋๋ ๋ง์ ์ด์ ์ ๋ง์ถ๋ค. Bonnefon et al. (2016)์ ์ฐ๊ตฌ์ ๋ฐ๋ฅด๋ฉด, ์์จ์ฃผํ ์ฐจ๋์ ์๊ณ ๋ฆฌ์ฆ์ด ์ง๋ฉดํ ์ ์๋ ์ค๋ฆฌ์ ์ ํ์ ๋ณต์ก์ฑ์ด ์ง์ ๋ ๋ฐ ์๋ค. ๋ณธ๊ณ ์์๋ ์ด๋ฌํ ์ค๋ฆฌ์ ๋๋ ๋ง๋ฅผ ์ธ ๊ฐ์ง ์ฃผ์ ๊ด์ ์์ ๋ถ์ํ๋ค: 1) ๊ณต๋ฆฌ์ฃผ์์ ์ ๊ทผ, 2) ์๋ฌด๋ก ์ ์ ๊ทผ, 3) ๋ ์ค๋ฆฌ์ ์ ๊ทผ. ๊ฐ ์ ๊ทผ๋ฒ์ ์ฅ๋จ์ ์ ๋น๊ต ๋ถ์ํ๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก ์์จ์ฃผํ ์ฐจ๋์ ์ค๋ฆฌ์ ์์ฌ๊ฒฐ์ ํ๋ ์์ํฌ๋ฅผ ์ ์ํ๊ณ ์ ํ๋ค...
|
214 |
"""
|
215 |
}
|
216 |
return prompts.get(style, "ํฌ์คํ
์คํ์ผ ํ๋กฌํํธ")
|
@@ -307,6 +412,17 @@ with gr.Blocks() as demo:
|
|
307 |
references2 = gr.Textbox(label="์ฐธ๊ณ ๊ธ 2", placeholder="์ฐธ๊ณ ํ ๊ธ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ผ์ธ์", lines=10, visible=True)
|
308 |
references3 = gr.Textbox(label="์ฐธ๊ณ ๊ธ 3", placeholder="์ฐธ๊ณ ํ ๊ธ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ผ์ธ์", lines=10, visible=True)
|
309 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
310 |
gr.Markdown("---\n\n")
|
311 |
|
312 |
gr.Markdown("### 5๋จ๊ณ: ๋ธ๋ก๊ทธ ์ ๋ชฉ์ ์
๋ ฅํ์ธ์", elem_id="step-title")
|
|
|
5 |
from huggingface_hub import InferenceClient
|
6 |
from fpdf import FPDF
|
7 |
from datetime import datetime
|
8 |
+
import requests
|
9 |
+
from bs4 import BeautifulSoup
|
10 |
+
from requests.adapters import HTTPAdapter
|
11 |
+
from requests.packages.urllib3.util.retry import Retry
|
12 |
+
import time
|
13 |
+
|
14 |
+
def setup_session():
|
15 |
+
try:
|
16 |
+
session = requests.Session()
|
17 |
+
retries = Retry(total=5, backoff_factor=1, status_forcelist=[502, 503, 504])
|
18 |
+
session.mount('https://', HTTPAdapter(max_retries=retries))
|
19 |
+
return session
|
20 |
+
except Exception as e:
|
21 |
+
return None
|
22 |
+
|
23 |
+
def generate_naver_search_url(query):
|
24 |
+
base_url = "https://search.naver.com/search.naver?"
|
25 |
+
params = {"ssc": "tab.blog.all", "sm": "tab_jum", "query": query}
|
26 |
+
url = base_url + "&".join(f"{key}={value}" for key, value in params.items())
|
27 |
+
return url
|
28 |
+
|
29 |
+
def crawl_blog_content(url, session):
|
30 |
+
try:
|
31 |
+
headers = {
|
32 |
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
|
33 |
+
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
|
34 |
+
"Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7",
|
35 |
+
"Accept-Encoding": "gzip, deflate, br",
|
36 |
+
"Connection": "keep-alive",
|
37 |
+
"Referer": "https://search.naver.com/search.naver",
|
38 |
+
}
|
39 |
+
|
40 |
+
delay = random.uniform(1, 2)
|
41 |
+
time.sleep(delay)
|
42 |
+
|
43 |
+
response = session.get(url, headers=headers)
|
44 |
+
if response.status_code != 200:
|
45 |
+
return ""
|
46 |
+
|
47 |
+
soup = BeautifulSoup(response.content, "html.parser")
|
48 |
+
content = soup.find("div", attrs={'class': 'se-main-container'})
|
49 |
+
|
50 |
+
if content:
|
51 |
+
return clean_text(content.get_text())
|
52 |
+
else:
|
53 |
+
return ""
|
54 |
+
except Exception as e:
|
55 |
+
return ""
|
56 |
+
|
57 |
+
def crawl_naver_search_results(url, session):
|
58 |
+
try:
|
59 |
+
headers = {
|
60 |
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
|
61 |
+
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
|
62 |
+
"Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7",
|
63 |
+
"Accept-Encoding": "gzip, deflate, br",
|
64 |
+
"Connection": "keep-alive",
|
65 |
+
"Referer": "https://search.naver.com/search.naver",
|
66 |
+
}
|
67 |
+
response = session.get(url, headers=headers)
|
68 |
+
if response.status_code != 200:
|
69 |
+
return []
|
70 |
+
|
71 |
+
soup = BeautifulSoup(response.content, "html.parser")
|
72 |
+
results = []
|
73 |
+
count = 0
|
74 |
+
for li in soup.find_all("li", class_=re.compile("bx.*")):
|
75 |
+
if count >= 10:
|
76 |
+
break
|
77 |
+
for div in li.find_all("div", class_="detail_box"):
|
78 |
+
for div2 in div.find_all("div", class_="title_area"):
|
79 |
+
title = div2.text.strip()
|
80 |
+
for a in div2.find_all("a", href=True):
|
81 |
+
link = a["href"]
|
82 |
+
if "blog.naver" in link:
|
83 |
+
link = link.replace("https://", "https://m.")
|
84 |
+
results.append({"์ ๋ชฉ": title, "๋งํฌ": link})
|
85 |
+
count += 1
|
86 |
+
if count >= 10:
|
87 |
+
break
|
88 |
+
if count >= 10:
|
89 |
+
break
|
90 |
+
if count >= 10:
|
91 |
+
break
|
92 |
+
|
93 |
+
return results
|
94 |
+
except Exception as e:
|
95 |
+
return []
|
96 |
+
|
97 |
+
def clean_text(text):
|
98 |
+
text = re.sub(r'\s+', ' ', text).strip()
|
99 |
+
return text
|
100 |
|
101 |
def create_client(model_name):
|
102 |
return InferenceClient(model_name, token=os.getenv("HF_TOKEN"))
|
|
|
133 |
formatted_text = modified_text.replace('\n', '\n\n')
|
134 |
return formatted_text
|
135 |
|
136 |
+
def fetch_references(topic):
|
137 |
+
search_url = generate_naver_search_url(topic)
|
138 |
+
session = setup_session()
|
139 |
+
if session is None:
|
140 |
+
return "Failed to set up session.", "", "", ""
|
141 |
+
results = crawl_naver_search_results(search_url, session)
|
142 |
+
if not results:
|
143 |
+
return "No results found.", "", "", ""
|
144 |
+
|
145 |
+
selected_results = random.sample(results, 3)
|
146 |
+
references1_content = f"์ ๋ชฉ: {selected_results[0]['์ ๋ชฉ']}\n๋ด์ฉ: {crawl_blog_content(selected_results[0]['๋งํฌ'], session)}"
|
147 |
+
references2_content = f"์ ๋ชฉ: {selected_results[1]['์ ๋ชฉ']}\n๋ด์ฉ: {crawl_blog_content(selected_results[1]['๋งํฌ'], session)}"
|
148 |
+
references3_content = f"์ ๋ชฉ: {selected_results[2]['์ ๋ชฉ']}\n๋ด์ฉ: {crawl_blog_content(selected_results[2]['๋งํฌ'], session)}"
|
149 |
+
|
150 |
+
return "์ฐธ๊ณ ๊ธ ์์ฑ ์๋ฃ", references1_content, references2_content, references3_content
|
151 |
+
|
152 |
def get_title_prompt(category):
|
153 |
if (category == "๊ณ ๊ฐ๋ฐ์ํ"):
|
154 |
return """
|
|
|
251 |
- ์น๊ทผํ๊ณ ๊ฒฉ๋ คํ๋ ํค์ผ๋ก ๋ง๋ฌด๋ฆฌ
|
252 |
- ๋ค์ ํฌ์คํ
์ ๋ํ ๊ธฐ๋๊ฐ ์ ๋ฐ
|
253 |
์ฃผ์์ฌํญ: ๋๋ฌด ๊ฐ๋ฒผ์ด ํค์ ์ง์ํ๊ณ , ์ฃผ์ ์ ์ค์์ฑ์ ํด์น์ง ์๋ ์ ์์ ์น๊ทผํจ ์ ์ง
|
254 |
+
์์: "์ฌ๋ฌ๋ถ, ์ค๋ ํ๋ฃจ๋ ์ด๋ ์
จ๋์? ๐ ์ ๋ ์ค๋ ์ฌ๋ฏธ์๋ ๊ฒฝํ์ ํ์ด์. ๋ฐ๋ก '๋ฏธ๋๋ฉ ๋ผ์ดํ'์ ๋์ ํด๋ณธ ๊ฑด๋ฐ์. ์ฒ์์๋ ์ข ๋ง๋งํ์ง๋ง, ์๊ฐ๋ณด๋ค ์ฆ๊ฑฐ์ด ๊ฒฝํ์ด์์ด์! ์ฌ๋ฌ๋ถ๋ ํ๋ฒ ๋ฐ๋ผํด๋ณด์๊ฒ ์ด์? ์ ๊ฐ ์๊ฒ ๋ ๊ฟํ๋ค์ ํ๋ํ๋ ์๋ ค๋๋ฆด๊ฒ์.
|
|
|
255 |
""",
|
256 |
"์ผ๋ฐ": """
|
257 |
#์ผ๋ฐ์ ์ธ ๋ธ๋ก๊ทธ ํฌ์คํ
์คํ์ผ ๊ฐ์ด๋
|
|
|
281 |
6. ๋ง๋ฌด๋ฆฌ
|
282 |
- ์ฃผ์ ๋ด์ฉ ๊ฐ๋จํ ์์ฝ
|
283 |
- ์ถ๊ฐ ์ ๋ณด์ ๋ํ ์๋ด ์ ๊ณต
|
284 |
+
์ฃผ์์ฌํญ: ๋๋ฌด ๋ฑ๋ฑํ๊ฑฐ๋ ์ง๋ฃจํ์ง ์๋๋ก ๊ท ํ ์ ์ง
|
285 |
+
์์: "์ต๊ทผ ํ๊ฒฝ ๋ฌธ์ ๊ฐ ๋๋๋๋ฉด์ '์ ๋ก ์จ์ด์คํธ' ๋ผ์ดํ์คํ์ผ์ ๋ํ ๊ด์ฌ์ด ๋์์ง๊ณ ์์ต๋๋ค. ์ ๋ก ์จ์ด์คํธ๋ ์ผ์์ํ์์ ๋ฐ์ํ๋ ์ฐ๋ ๊ธฐ๋ฅผ ์ต์ํํ๋ ์ํ ๋ฐฉ์์ ๋งํฉ๋๋ค. ์ด ๊ธ์์๋ ์ ๋ก ์จ์ด์คํธ์ ๊ฐ๋
, ์ค์ฒ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ๊ทธ ํจ๊ณผ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ๋จผ์ ์ ๋ก ์จ์ด์คํธ์ ์ ์๋ถํฐ ์ดํด๋ณด๋ฉด...
|
|
|
286 |
""",
|
287 |
"์ ๋ฌธ์ ์ธ": """
|
288 |
#์ ๋ฌธ์ ์ธ ๋ธ๋ก๊ทธ ํฌ์คํ
์คํ์ผ ๊ฐ์ด๋
|
289 |
|
290 |
1. ํค๊ณผ ๊ตฌ์กฐ
|
291 |
- ๊ณต์์ ์ด๊ณ ํ์ ์ ์ธ ํค ์ฌ์ฉ
|
292 |
+
- ๊ฐ๊ด์ ์ด๊ณ ๋ถ์์ ์ธ ์ ๊ทผ ์ ์ง
|
293 |
- ๋ช
ํํ ์๋ก , ๋ณธ๋ก , ๊ฒฐ๋ก ๊ตฌ์กฐ
|
294 |
- ์ฒด๊ณ์ ์ธ ๋
ผ์ ์ ๊ฐ
|
295 |
- ์ธ๋ถ ์น์
์ ์ํ ๋ช
ํํ ์์ ๋ชฉ ์ฌ์ฉ
|
|
|
314 |
5. ๋ง๋ฌด๋ฆฌ
|
315 |
- ํต์ฌ ๋
ผ์ ์ฌ๊ฐ์กฐ
|
316 |
- ํฅํ ์ฐ๊ตฌ ๋ฐฉํฅ์ด๋ ์ค๋ฌด์ ํจ์ ์ ์
|
317 |
+
์ฃผ์์ฌํญ: ์ ๋ฌธ์ฑ์ ์ ์งํ๋, ์์ ํ ์ดํดํ๊ธฐ ์ด๋ ค์ด ์์ค์ ์ง์
|
318 |
+
์์: "๋ณธ ์ฐ๊ตฌ์์๋ ์ธ๊ณต์ง๋ฅ(AI)์ ์ค๋ฆฌ์ ํจ์์ ๋ํด ๊ณ ์ฐฐํ๋ค. ํนํ, ์์จ์ฃผํ ์๋์ฐจ์ ์์ฌ๊ฒฐ์ ์๊ณ ๋ฆฌ์ฆ์์ ๋ฐ์ํ ์ ์๋ ์ค๋ฆฌ์ ๋๋ ๋ง์ ์ด์ ์ ๋ง์ถ๋ค. Bonnefon et al. (2016)์ ์ฐ๊ตฌ์ ๋ฐ๋ฅด๋ฉด, ์์จ์ฃผํ ์ฐจ๋์ ์๊ณ ๋ฆฌ์ฆ์ด ์ง๋ฉดํ ์ ์๋ ์ค๋ฆฌ์ ์ ํ์ ๋ณต์ก์ฑ์ด ์ง์ ๋ ๋ฐ ์๋ค. ๋ณธ๊ณ ์์๋ ์ด๋ฌํ ์ค๋ฆฌ์ ๋๋ ๋ง๋ฅผ ์ธ ๊ฐ์ง ์ฃผ์ ๊ด์ ์์ ๋ถ์ํ๋ค: 1) ๊ณต๋ฆฌ์ฃผ์์ ์ ๊ทผ, 2) ์๋ฌด๋ก ์ ์ ๊ทผ, 3) ๋ ์ค๋ฆฌ์ ์ ๊ทผ. ๊ฐ ์ ๊ทผ๋ฒ์ ์ฅ๋จ์ ์ ๋น๊ต ๋ถ์ํ๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก ์์จ์ฃผํ ์ฐจ๋์ ์ค๋ฆฌ์ ์์ฌ๊ฒฐ์ ํ๋ ์์ํฌ๋ฅผ ์ ์ํ๊ณ ์ ํ๋ค...
|
|
|
319 |
"""
|
320 |
}
|
321 |
return prompts.get(style, "ํฌ์คํ
์คํ์ผ ํ๋กฌํํธ")
|
|
|
412 |
references2 = gr.Textbox(label="์ฐธ๊ณ ๊ธ 2", placeholder="์ฐธ๊ณ ํ ๊ธ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ผ์ธ์", lines=10, visible=True)
|
413 |
references3 = gr.Textbox(label="์ฐธ๊ณ ๊ธ 3", placeholder="์ฐธ๊ณ ํ ๊ธ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ผ์ธ์", lines=10, visible=True)
|
414 |
|
415 |
+
# ์งํ ์ํฉ ํ์๋ฅผ ์ํ ์ถ๋ ฅ ํ
์คํธ๋ฐ์ค
|
416 |
+
progress_output = gr.Textbox(label="์งํ ์ํฉ", lines=2, visible=True)
|
417 |
+
|
418 |
+
# ์ฐธ๊ณ ๊ธ ๊ฐ์ ธ์ค๊ธฐ ๋ฒํผ
|
419 |
+
fetch_references_btn = gr.Button("์ฐธ๊ณ ๊ธ ์์ฑํ๊ธฐ")
|
420 |
+
fetch_references_btn.click(fn=fetch_references, inputs=[topic], outputs=[progress_output, references1, references2, references3])
|
421 |
+
|
422 |
+
# ์ฐธ๊ณ ๊ธ ๋ค์ ๋ฃ๊ธฐ ๋ฒํผ
|
423 |
+
refill_btn = gr.Button("์ฐธ๊ณ ๊ธ ๋ค์ ๋ฃ๊ธฐ")
|
424 |
+
refill_btn.click(fn=fetch_references, inputs=[topic], outputs=[progress_output, references1, references2, references3])
|
425 |
+
|
426 |
gr.Markdown("---\n\n")
|
427 |
|
428 |
gr.Markdown("### 5๋จ๊ณ: ๋ธ๋ก๊ทธ ์ ๋ชฉ์ ์
๋ ฅํ์ธ์", elem_id="step-title")
|