Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -7,6 +7,21 @@ import requests
|
|
| 7 |
# λλ²κΉ
λ‘κΉ
μ€μ (μ 체 ν΅ν©μ μν΄ ν¬λ§· ν¬ν¨)
|
| 8 |
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(levelname)s - %(message)s")
|
| 9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
# ---------- [λͺ¨λ1: κΈ°μ‘΄ κΈ°λ³Έμ½λ] μμ ----------
|
| 11 |
# μμ΄ μμ νκ΅μ΄ μλ‘ λ³ννκΈ° μν λ§€ν
|
| 12 |
month_mapping = {
|
|
@@ -206,7 +221,6 @@ def process_html_sections(html_text):
|
|
| 206 |
logging.debug("HTML μ²λ¦¬ μλ£ (μΉμ
λ³ λΆλ¦¬)")
|
| 207 |
sections_list = list(sections_dict.keys())
|
| 208 |
default_val = sections_list[0] if sections_list else None
|
| 209 |
-
# gr.Dropdown.update() λμ gr.update() μ¬μ©
|
| 210 |
return subject_name, gr.update(choices=sections_list, value=default_val), sections_dict
|
| 211 |
|
| 212 |
def update_lecture_and_urls(selected_section, sections_dict):
|
|
@@ -214,14 +228,13 @@ def update_lecture_and_urls(selected_section, sections_dict):
|
|
| 214 |
μ νν μΉμ
μ λ°νμΌλ‘ κ°μ λͺ©λ‘ ν
μ€νΈμ URLλ€μ μΆμΆνμ¬
|
| 215 |
- κ°μ λͺ©λ‘ ν
μ€νΈ(μμΌλ©΄ "κ°μκ° μμ΅λλ€" λ°ν)
|
| 216 |
- μ΅λ 3κ°μ κ°μ URL (κ°μ URLμ΄ μμΌλ©΄ λΉ λ¬Έμμ΄)
|
| 217 |
-
|
| 218 |
"""
|
| 219 |
if not selected_section or not sections_dict:
|
| 220 |
return "", "", "", ""
|
| 221 |
lectures_text, url_list = sections_dict.get(selected_section, ("", []))
|
| 222 |
if not lectures_text:
|
| 223 |
lectures_text = "κ°μκ° μμ΅λλ€"
|
| 224 |
-
# κ°μ URL 3κ° μ±μ°κΈ° (μμΌλ©΄ λΉ λ¬Έμμ΄)
|
| 225 |
url1 = url_list[0] if len(url_list) >= 1 else ""
|
| 226 |
url2 = url_list[1] if len(url_list) >= 2 else ""
|
| 227 |
url3 = url_list[2] if len(url_list) >= 3 else ""
|
|
@@ -310,7 +323,6 @@ def process_full(lecture_url):
|
|
| 310 |
"""
|
| 311 |
μ
λ ₯λ κ°μ URLλ‘λΆν° μ€ν¬λ¦½νΈ URLμ μμ±νκ³ ,
|
| 312 |
ν΄λΉ μ€ν¬λ¦½νΈλ₯Ό κ°μ Έμ¨ ν νμλΌμΈμ μ κ±°ν μ΅μ’
κ°μ λ΄μ©μ λ°ννλ ν¨μ.
|
| 313 |
-
(μ€κ° λ¨κ³λ μΆλ ₯νμ§ μκ³ μ΅μ’
κ²°κ³Όλ§ λ°ν)
|
| 314 |
"""
|
| 315 |
script_url = create_script_url(lecture_url)
|
| 316 |
if not script_url:
|
|
@@ -324,10 +336,9 @@ def process_full(lecture_url):
|
|
| 324 |
return cleaned
|
| 325 |
# ---------- [λͺ¨λ2: μΆκ°μ½λ] λ ----------
|
| 326 |
|
| 327 |
-
# ---------- [λͺ¨λ3: κ°μλ΄μ© ν©μΉκΈ° μΆκ°μ½λ] μμ ----------
|
| 328 |
with gr.Blocks() as merge_demo:
|
| 329 |
-
gr.Markdown("## κ°μλ΄μ© ν©μΉκΈ°")
|
| 330 |
-
# "κ°μλ΄μ© ν©μΉκΈ°" λ²νΌ μμ (μμ²μ¬νμ λ°λΌ μμ )
|
| 331 |
merged_content = gr.Textbox(label="μ 체 κ°μ λ΄μ©", lines=10, elem_id="merged_content")
|
| 332 |
with gr.Row():
|
| 333 |
merge_copy_btn = gr.Button("μ 체 κ°μ λ΄μ© 볡μ¬νκΈ°", elem_id="merge_copy_btn")
|
|
@@ -347,8 +358,6 @@ with gr.Blocks() as merge_demo:
|
|
| 347 |
merged += "[κ°μ3]\n" + l3.strip()
|
| 348 |
return merged
|
| 349 |
|
| 350 |
-
# "κ°μλ΄μ© ν©μΉκΈ°" λ²νΌ μμ μ λ°λΌ merge_btn κ΄λ ¨ μ½λ μ κ±°
|
| 351 |
-
|
| 352 |
merge_copy_script = """
|
| 353 |
<script>
|
| 354 |
function setupMergeCopy(copyBtnId, textBoxId, resultBoxId) {
|
|
@@ -384,7 +393,7 @@ with gr.Blocks() as merge_demo:
|
|
| 384 |
</script>
|
| 385 |
"""
|
| 386 |
gr.HTML(merge_copy_script)
|
| 387 |
-
# ---------- [λͺ¨λ3: κ°μλ΄μ© ν©μΉκΈ° μΆκ°μ½λ] λ ----------
|
| 388 |
|
| 389 |
# ---------- μλ‘μ΄ κΈ°λ₯: 'μ νν μΉμ
κ°μ λͺ©λ‘'μμ κ°μ URL μΆμΆ λ° κ°μ λ΄μ© μλ μ
λ°μ΄νΈ κΈ°λ₯ μΆκ° ----------
|
| 390 |
def merge_contents_global(l1, l2, l3):
|
|
@@ -430,13 +439,14 @@ def handle_fetch_all(lecture_list_text):
|
|
| 430 |
|
| 431 |
# ---------- ν΅ν© Gradio μ± κ΅¬μ± (ν νμ΄μ§μ λͺ¨λ νμ) ----------
|
| 432 |
with gr.Blocks() as additional_demo:
|
| 433 |
-
|
|
|
|
| 434 |
with gr.Row():
|
| 435 |
url1 = gr.Textbox(label="κ°μ1 URL", elem_id="url1")
|
| 436 |
url2 = gr.Textbox(label="κ°μ2 URL", elem_id="url2")
|
| 437 |
url3 = gr.Textbox(label="κ°μ3 URL", elem_id="url3")
|
| 438 |
with gr.Row():
|
| 439 |
-
# κ°λ³ 'κ°μ λ΄μ© κ°μ Έμ€κΈ°' λ²νΌ μμ (μμ²μ¬νμ λ°λΌ
|
| 440 |
pass
|
| 441 |
with gr.Row():
|
| 442 |
lecture_content1 = gr.Textbox(label="κ°μ λ΄μ©", lines=10, elem_id="lecture_content1")
|
|
@@ -488,37 +498,37 @@ with gr.Blocks() as additional_demo:
|
|
| 488 |
</script>
|
| 489 |
"""
|
| 490 |
gr.HTML(custom_script)
|
| 491 |
-
|
| 492 |
|
| 493 |
with gr.Blocks() as app:
|
|
|
|
| 494 |
gr.Markdown("# μΊλ‘€λΌμΈλν κ°μ μΆμΆκΈ°")
|
| 495 |
-
gr.Markdown("μ 체 νμ΄μ§ HTML
|
| 496 |
gr.HTML(
|
| 497 |
"""
|
| 498 |
<div style="background-color: #f0f0f0; padding: 10px; margin-bottom: 20px;">
|
| 499 |
-
<strong>μ¬μ©λ°©λ²</strong>
|
| 500 |
<ol>
|
| 501 |
<li>μΆμΆμ μνλ κ°μ νμ΄μ§μμ "Ctrl + U"λ₯Ό λλ¬ νμ΄μ§ μμ€λ₯Ό νμΈνκ±°λ, λ§μ°μ€ μ°ν΄λ¦ ν "νμ΄μ§ μμ€ λ³΄κΈ°"λ₯Ό μ νν©λλ€.</li>
|
| 502 |
-
<li>νμ΄μ§ μμ€μμ μ 체 볡μ¬
|
| 503 |
-
<li>
|
| 504 |
-
<li>
|
| 505 |
-
<li>
|
| 506 |
</ol>
|
| 507 |
</div>
|
| 508 |
"""
|
| 509 |
)
|
| 510 |
-
# λͺ¨λ1: HTML μ
λ ₯ λ°
|
| 511 |
with gr.Tab("HTML νμ± λ° μΉμ
μ ν"):
|
| 512 |
with gr.Row():
|
| 513 |
with gr.Column():
|
| 514 |
-
html_input = gr.Textbox(label="μ 체 νμ΄μ§ HTML μ
λ ₯", lines=20, placeholder="HTML μ½λλ₯Ό μ
λ ₯νμΈμ...")
|
| 515 |
parse_btn = gr.Button("Submit")
|
| 516 |
-
with gr.Column():
|
| 517 |
-
subject_out = gr.Textbox(label="κ³Όλͺ©λͺ
", interactive=False)
|
| 518 |
section_dropdown = gr.Dropdown(label="μΉμ
μ ν", choices=[], interactive=True)
|
| 519 |
-
lecture_out = gr.Textbox(label="μ νν μΉμ
κ°μ λͺ©λ‘", lines=
|
| 520 |
with gr.Row():
|
| 521 |
-
# [μμ²μ¬ν]μ λ°λΌ "μ νν μΉμ
κ°μ λͺ©λ‘" μλμ 'κ°μ λ΄μ© κ°μ Έμ€κΈ°' λ²νΌ μΆκ°
|
| 522 |
fetch_all_btn = gr.Button("κ°μ λ΄μ© κ°μ Έμ€κΈ°", elem_id="fetch_all_btn")
|
| 523 |
sections_state = gr.State()
|
| 524 |
|
|
@@ -527,13 +537,13 @@ with gr.Blocks() as app:
|
|
| 527 |
inputs=html_input,
|
| 528 |
outputs=[subject_out, section_dropdown, sections_state]
|
| 529 |
)
|
| 530 |
-
# μΉμ
μ νμ κ°μλͺ©λ‘ ν
μ€νΈλ§ μ
λ°μ΄νΈ
|
| 531 |
section_dropdown.change(
|
| 532 |
fn=update_lecture_text_only,
|
| 533 |
inputs=[section_dropdown, sections_state],
|
| 534 |
outputs=lecture_out
|
| 535 |
)
|
| 536 |
-
# "κ°μ λ΄μ© κ°μ Έμ€κΈ°" λ²νΌ ν΄λ¦μ κ°μ URLκ³Ό λ΄μ© μ
λ°μ΄νΈ (
|
| 537 |
fetch_all_btn.click(
|
| 538 |
fn=handle_fetch_all,
|
| 539 |
inputs=lecture_out,
|
|
@@ -541,7 +551,7 @@ with gr.Blocks() as app:
|
|
| 541 |
)
|
| 542 |
|
| 543 |
gr.Markdown("---")
|
| 544 |
-
|
| 545 |
additional_demo.render()
|
| 546 |
merge_demo.render()
|
| 547 |
|
|
|
|
| 7 |
# λλ²κΉ
λ‘κΉ
μ€μ (μ 체 ν΅ν©μ μν΄ ν¬λ§· ν¬ν¨)
|
| 8 |
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(levelname)s - %(message)s")
|
| 9 |
|
| 10 |
+
# ---------- μ¬μ©μ μ μ CSS (μΌμͺ½κ³Ό μ€λ₯Έμͺ½ μμμ λμ΄λ₯Ό λμΌνκ² λ§μΆ€) ----------
|
| 11 |
+
css = """
|
| 12 |
+
<style>
|
| 13 |
+
/* μΌμͺ½ 'μ 체 νμ΄μ§ HTML μ
λ ₯' μμμ textarea λμ΄ μ€μ */
|
| 14 |
+
#html_input textarea {
|
| 15 |
+
height: 400px !important;
|
| 16 |
+
}
|
| 17 |
+
/* μ€λ₯Έμͺ½ μμμ κ°μΈλ 컨ν
μ΄λμ λμ΄ μ€μ */
|
| 18 |
+
#right_panel {
|
| 19 |
+
height: 400px;
|
| 20 |
+
overflow-y: auto;
|
| 21 |
+
}
|
| 22 |
+
</style>
|
| 23 |
+
"""
|
| 24 |
+
|
| 25 |
# ---------- [λͺ¨λ1: κΈ°μ‘΄ κΈ°λ³Έμ½λ] μμ ----------
|
| 26 |
# μμ΄ μμ νκ΅μ΄ μλ‘ λ³ννκΈ° μν λ§€ν
|
| 27 |
month_mapping = {
|
|
|
|
| 221 |
logging.debug("HTML μ²λ¦¬ μλ£ (μΉμ
λ³ λΆλ¦¬)")
|
| 222 |
sections_list = list(sections_dict.keys())
|
| 223 |
default_val = sections_list[0] if sections_list else None
|
|
|
|
| 224 |
return subject_name, gr.update(choices=sections_list, value=default_val), sections_dict
|
| 225 |
|
| 226 |
def update_lecture_and_urls(selected_section, sections_dict):
|
|
|
|
| 228 |
μ νν μΉμ
μ λ°νμΌλ‘ κ°μ λͺ©λ‘ ν
μ€νΈμ URLλ€μ μΆμΆνμ¬
|
| 229 |
- κ°μ λͺ©λ‘ ν
μ€νΈ(μμΌλ©΄ "κ°μκ° μμ΅λλ€" λ°ν)
|
| 230 |
- μ΅λ 3κ°μ κ°μ URL (κ°μ URLμ΄ μμΌλ©΄ λΉ λ¬Έμμ΄)
|
| 231 |
+
μ λ°ν.
|
| 232 |
"""
|
| 233 |
if not selected_section or not sections_dict:
|
| 234 |
return "", "", "", ""
|
| 235 |
lectures_text, url_list = sections_dict.get(selected_section, ("", []))
|
| 236 |
if not lectures_text:
|
| 237 |
lectures_text = "κ°μκ° μμ΅λλ€"
|
|
|
|
| 238 |
url1 = url_list[0] if len(url_list) >= 1 else ""
|
| 239 |
url2 = url_list[1] if len(url_list) >= 2 else ""
|
| 240 |
url3 = url_list[2] if len(url_list) >= 3 else ""
|
|
|
|
| 323 |
"""
|
| 324 |
μ
λ ₯λ κ°μ URLλ‘λΆν° μ€ν¬λ¦½νΈ URLμ μμ±νκ³ ,
|
| 325 |
ν΄λΉ μ€ν¬λ¦½νΈλ₯Ό κ°μ Έμ¨ ν νμλΌμΈμ μ κ±°ν μ΅μ’
κ°μ λ΄μ©μ λ°ννλ ν¨μ.
|
|
|
|
| 326 |
"""
|
| 327 |
script_url = create_script_url(lecture_url)
|
| 328 |
if not script_url:
|
|
|
|
| 336 |
return cleaned
|
| 337 |
# ---------- [λͺ¨λ2: μΆκ°μ½λ] λ ----------
|
| 338 |
|
| 339 |
+
# ---------- [λͺ¨λ3: κ°μ λ΄μ© ν©μΉκΈ° μΆκ°μ½λ] μμ ----------
|
| 340 |
with gr.Blocks() as merge_demo:
|
| 341 |
+
gr.Markdown("## κ°μ λ΄μ© ν©μΉκΈ°")
|
|
|
|
| 342 |
merged_content = gr.Textbox(label="μ 체 κ°μ λ΄μ©", lines=10, elem_id="merged_content")
|
| 343 |
with gr.Row():
|
| 344 |
merge_copy_btn = gr.Button("μ 체 κ°μ λ΄μ© 볡μ¬νκΈ°", elem_id="merge_copy_btn")
|
|
|
|
| 358 |
merged += "[κ°μ3]\n" + l3.strip()
|
| 359 |
return merged
|
| 360 |
|
|
|
|
|
|
|
| 361 |
merge_copy_script = """
|
| 362 |
<script>
|
| 363 |
function setupMergeCopy(copyBtnId, textBoxId, resultBoxId) {
|
|
|
|
| 393 |
</script>
|
| 394 |
"""
|
| 395 |
gr.HTML(merge_copy_script)
|
| 396 |
+
# ---------- [λͺ¨λ3: κ°μ λ΄μ© ν©μΉκΈ° μΆκ°μ½λ] λ ----------
|
| 397 |
|
| 398 |
# ---------- μλ‘μ΄ κΈ°λ₯: 'μ νν μΉμ
κ°μ λͺ©λ‘'μμ κ°μ URL μΆμΆ λ° κ°μ λ΄μ© μλ μ
λ°μ΄νΈ κΈ°λ₯ μΆκ° ----------
|
| 399 |
def merge_contents_global(l1, l2, l3):
|
|
|
|
| 439 |
|
| 440 |
# ---------- ν΅ν© Gradio μ± κ΅¬μ± (ν νμ΄μ§μ λͺ¨λ νμ) ----------
|
| 441 |
with gr.Blocks() as additional_demo:
|
| 442 |
+
# [λͺ¨λ2] - κ°μ λ΄μ© κ°μ Έμ€κΈ° μμ (μμ λ΄μ© μ κ±° λ° νμ΄ν μμ )
|
| 443 |
+
gr.Markdown("## κ°μ λ΄μ© κ°μ Έμ€κΈ°")
|
| 444 |
with gr.Row():
|
| 445 |
url1 = gr.Textbox(label="κ°μ1 URL", elem_id="url1")
|
| 446 |
url2 = gr.Textbox(label="κ°μ2 URL", elem_id="url2")
|
| 447 |
url3 = gr.Textbox(label="κ°μ3 URL", elem_id="url3")
|
| 448 |
with gr.Row():
|
| 449 |
+
# κ°λ³ 'κ°μ λ΄μ© κ°μ Έμ€κΈ°' λ²νΌμ μμ λ¨ (μμ²μ¬νμ λ°λΌ μ κ±°)
|
| 450 |
pass
|
| 451 |
with gr.Row():
|
| 452 |
lecture_content1 = gr.Textbox(label="κ°μ λ΄μ©", lines=10, elem_id="lecture_content1")
|
|
|
|
| 498 |
</script>
|
| 499 |
"""
|
| 500 |
gr.HTML(custom_script)
|
| 501 |
+
# (μμ λ΄μ© κ΄λ ¨ gr.Markdown μ κ±°)
|
| 502 |
|
| 503 |
with gr.Blocks() as app:
|
| 504 |
+
gr.HTML(css) # μ¬μ©μ μ μ CSS μ½μ
|
| 505 |
gr.Markdown("# μΊλ‘€λΌμΈλν κ°μ μΆμΆκΈ°")
|
| 506 |
+
gr.Markdown("[μ¬μ©λ°©λ²] \n1. μΆμΆμ μνλ κ°μ νμ΄μ§μμ \"Ctrl + U\"λ₯Ό λλ¬ νμ΄μ§ μμ€λ₯Ό νμΈνκ±°λ, λ§μ°μ€ μ°ν΄λ¦ ν \"νμ΄μ§ μμ€ λ³΄κΈ°\"λ₯Ό μ νν©λλ€. \n2. νμ΄μ§ μμ€μμ μ 체 λ³΅μ¬ ν©λλ€. (\"Ctrl+A\" β \"Ctrl+C\")\n3. 볡μ¬ν λ΄μ©μ ν΄λΉ νμ΄μ§ \"μ 체 νμ΄μ§ HTML μ
λ ₯\"μ λΆμ¬ λκ³ (Ctrl+V) \"Submit\" λ²νΌμ ν΄λ¦ν©λλ€.\n4. μ€λ₯Έμͺ½ μ°½μμ μνλ μΉμ
μ μ ν ν \"κ°μ λ΄μ© κ°μ Έμ€κΈ°\" λ²νΌμ ν΄λ¦ν©λλ€.\n5. κ°μ Έμ¨ κ°μ λ΄μ© μ€μμ νμν λ΄μ©λ§ 볡μ¬νμ¬ μ¬μ© κ°λ₯ν©λλ€.")
|
| 507 |
gr.HTML(
|
| 508 |
"""
|
| 509 |
<div style="background-color: #f0f0f0; padding: 10px; margin-bottom: 20px;">
|
| 510 |
+
<strong>[μ¬μ©λ°©λ²]</strong>
|
| 511 |
<ol>
|
| 512 |
<li>μΆμΆμ μνλ κ°μ νμ΄μ§μμ "Ctrl + U"λ₯Ό λλ¬ νμ΄μ§ μμ€λ₯Ό νμΈνκ±°λ, λ§μ°μ€ μ°ν΄λ¦ ν "νμ΄μ§ μμ€ λ³΄κΈ°"λ₯Ό μ νν©λλ€.</li>
|
| 513 |
+
<li>νμ΄μ§ μμ€μμ μ 체 λ³΅μ¬ ν©λλ€. ("Ctrl+A" β "Ctrl+C")</li>
|
| 514 |
+
<li>볡μ¬ν λ΄μ©μ ν΄λΉ νμ΄μ§ "μ 체 νμ΄μ§ HTML μ
λ ₯"μ λΆμ¬ λκ³ (Ctrl+V) "Submit" λ²νΌμ ν΄λ¦ν©λλ€.</li>
|
| 515 |
+
<li>μ€λ₯Έμͺ½ μ°½μμ μνλ μΉμ
μ μ ν ν "κ°μ λ΄μ© κ°μ Έμ€κΈ°" λ²νΌμ ν΄λ¦ν©λλ€.</li>
|
| 516 |
+
<li>κ°μ Έμ¨ κ°μ λ΄μ© μ€μμ νμν λ΄μ©λ§ 볡μ¬νμ¬ μ¬μ© κ°λ₯ν©λλ€.</li>
|
| 517 |
</ol>
|
| 518 |
</div>
|
| 519 |
"""
|
| 520 |
)
|
| 521 |
+
# λͺ¨λ1: HTML μ
λ ₯ λ° κ³Όλͺ©/μΉμ
νμ (μΌμͺ½κ³Ό μ€λ₯Έμͺ½ μμμ λμ΄λ₯Ό λμΌνκ² λ§μΆ€)
|
| 522 |
with gr.Tab("HTML νμ± λ° μΉμ
μ ν"):
|
| 523 |
with gr.Row():
|
| 524 |
with gr.Column():
|
| 525 |
+
html_input = gr.Textbox(label="μ 체 νμ΄μ§ HTML μ
λ ₯", lines=20, placeholder="HTML μ½λλ₯Ό μ
λ ₯νμΈμ...", elem_id="html_input")
|
| 526 |
parse_btn = gr.Button("Submit")
|
| 527 |
+
with gr.Column(elem_id="right_panel"):
|
| 528 |
+
subject_out = gr.Textbox(label="κ³Όλͺ©λͺ
", interactive=False, lines=20)
|
| 529 |
section_dropdown = gr.Dropdown(label="μΉμ
μ ν", choices=[], interactive=True)
|
| 530 |
+
lecture_out = gr.Textbox(label="μ νν μΉμ
κ°μ λͺ©λ‘", lines=20, interactive=False)
|
| 531 |
with gr.Row():
|
|
|
|
| 532 |
fetch_all_btn = gr.Button("κ°μ λ΄μ© κ°μ Έμ€κΈ°", elem_id="fetch_all_btn")
|
| 533 |
sections_state = gr.State()
|
| 534 |
|
|
|
|
| 537 |
inputs=html_input,
|
| 538 |
outputs=[subject_out, section_dropdown, sections_state]
|
| 539 |
)
|
| 540 |
+
# μΉμ
μ ν μ κ°μλͺ©λ‘ ν
μ€νΈλ§ μ
λ°μ΄νΈ
|
| 541 |
section_dropdown.change(
|
| 542 |
fn=update_lecture_text_only,
|
| 543 |
inputs=[section_dropdown, sections_state],
|
| 544 |
outputs=lecture_out
|
| 545 |
)
|
| 546 |
+
# "κ°μ λ΄μ© κ°μ Έμ€κΈ°" λ²νΌ ν΄λ¦ μ κ°μ URLκ³Ό λ΄μ© μ
λ°μ΄νΈ ([νλ] μ€ν)
|
| 547 |
fetch_all_btn.click(
|
| 548 |
fn=handle_fetch_all,
|
| 549 |
inputs=lecture_out,
|
|
|
|
| 551 |
)
|
| 552 |
|
| 553 |
gr.Markdown("---")
|
| 554 |
+
# (μμ λ΄μ© κ΄λ ¨ gr.Markdown μ κ±°)
|
| 555 |
additional_demo.render()
|
| 556 |
merge_demo.render()
|
| 557 |
|