Spaces:
				
			
			
	
			
			
					
		Running
		
	
	
	
			
			
	
	
	
	
		
		
					
		Running
		
	Update app.py
Browse files
    	
        app.py
    CHANGED
    
    | 
         @@ -142,7 +142,6 @@ def pdf_to_markdown(pdf_path: str) -> str: 
     | 
|
| 142 | 
         
             
                            page_text = page.extract_text() or ""
         
     | 
| 143 | 
         
             
                            page_text = page_text.strip()
         
     | 
| 144 | 
         
             
                            if page_text:
         
     | 
| 145 | 
         
            -
                                # ํ์ด์ง๋ณ ์ต๋์น ์๋ผ์ ์ฌ์ฉ
         
     | 
| 146 | 
         
             
                                if len(page_text) > MAX_CONTENT_CHARS // max_pages:
         
     | 
| 147 | 
         
             
                                    page_text = page_text[:MAX_CONTENT_CHARS // max_pages] + "...(truncated)"
         
     | 
| 148 | 
         
             
                                text_chunks.append(f"## Page {page_num+1}\n\n{page_text}\n")
         
     | 
| 
         @@ -278,7 +277,6 @@ def process_interleaved_images(message: dict) -> list[dict]: 
     | 
|
| 278 | 
         
             
                    elif part.strip():
         
     | 
| 279 | 
         
             
                        content.append({"type": "text", "text": part.strip()})
         
     | 
| 280 | 
         
             
                    else:
         
     | 
| 281 | 
         
            -
                        # ๋น ๋ฌธ์์ด๋ content์ ์ถ๊ฐ๋  ์ ์์ผ๋ฏ๋ก ํ์ํ ๊ฒฝ์ฐ ์กฐ์ 
         
     | 
| 282 | 
         
             
                        if isinstance(part, str) and part != "<image>":
         
     | 
| 283 | 
         
             
                            content.append({"type": "text", "text": part})
         
     | 
| 284 | 
         
             
                return content
         
     | 
| 
         @@ -331,7 +329,6 @@ def process_new_user_message(message: dict) -> list[dict]: 
     | 
|
| 331 | 
         | 
| 332 | 
         
             
                if "<image>" in message["text"] and image_files:
         
     | 
| 333 | 
         
             
                    interleaved_content = process_interleaved_images({"text": message["text"], "files": image_files})
         
     | 
| 334 | 
         
            -
                    # ์ด๋ฏธ text ๋ณธ๋ฌธ์ <image>๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ, ์ค๋ณต ์ฒ๋ฆฌ๋ฅผ ํผํ๊ธฐ ์ํด ํ์ ์ ์กฐ์ 
         
     | 
| 335 | 
         
             
                    if content_list and content_list[0]["type"] == "text":
         
     | 
| 336 | 
         
             
                        content_list = content_list[1:]
         
     | 
| 337 | 
         
             
                    return interleaved_content + content_list
         
     | 
| 
         @@ -570,40 +567,44 @@ examples = [ 
     | 
|
| 570 | 
         
             
            # Gradio UI (Blocks) ๊ตฌ์ฑ (์ข์ธก ์ฌ์ด๋ ๋ฉ๋ด ์์ด ์ ์ฒดํ๋ฉด ์ฑํ
)
         
     | 
| 571 | 
         
             
            ##############################################################################
         
     | 
| 572 | 
         
             
            css = """
         
     | 
| 573 | 
         
            -
             
     | 
| 574 | 
         
            -
                background: linear-gradient(135deg, #667eea, #764ba2);
         
     | 
| 575 | 
         
            -
                font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
         
     | 
| 576 | 
         
            -
                color: #333;
         
     | 
| 577 | 
         
            -
                margin: 0;
         
     | 
| 578 | 
         
            -
                padding: 0;
         
     | 
| 579 | 
         
            -
            }
         
     | 
| 580 | 
         
             
            .gradio-container {
         
     | 
| 581 | 
         
             
                background: rgba(255, 255, 255, 0.95);
         
     | 
| 582 | 
         
             
                border-radius: 15px;
         
     | 
| 583 | 
         
             
                padding: 30px 40px;
         
     | 
| 584 | 
         
             
                box-shadow: 0 8px 30px rgba(0, 0, 0, 0.3);
         
     | 
| 585 | 
         
            -
                margin:  
     | 
| 586 | 
         
            -
                 
     | 
| 587 | 
         
            -
             
     | 
| 588 | 
         
            -
            .gradio-container h1 {
         
     | 
| 589 | 
         
            -
                color: #333;
         
     | 
| 590 | 
         
            -
                text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
         
     | 
| 591 | 
         
             
            }
         
     | 
| 
         | 
|
| 592 | 
         
             
            .fillable {
         
     | 
| 593 | 
         
            -
                width:  
     | 
| 594 | 
         
            -
                max-width:  
     | 
| 595 | 
         
            -
            }
         
     | 
| 596 | 
         
            -
            #examples_container {
         
     | 
| 597 | 
         
            -
                margin: auto;
         
     | 
| 598 | 
         
            -
                width: 90%;
         
     | 
| 599 | 
         
             
            }
         
     | 
| 600 | 
         
            -
             
     | 
| 601 | 
         
            -
             
     | 
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 602 | 
         
             
            }
         
     | 
| 
         | 
|
| 
         | 
|
| 603 | 
         
             
            button, .btn {
         
     | 
| 604 | 
         
            -
                background: linear-gradient( 
     | 
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 605 | 
         
             
                border: none;
         
     | 
| 606 | 
         
            -
                color: # 
     | 
| 607 | 
         
             
                padding: 12px 24px;
         
     | 
| 608 | 
         
             
                text-transform: uppercase;
         
     | 
| 609 | 
         
             
                font-weight: bold;
         
     | 
| 
         @@ -612,8 +613,18 @@ button, .btn { 
     | 
|
| 612 | 
         
             
                cursor: pointer;
         
     | 
| 613 | 
         
             
                transition: transform 0.2s ease-in-out;
         
     | 
| 614 | 
         
             
            }
         
     | 
| 
         | 
|
| 615 | 
         
             
            button:hover, .btn:hover {
         
     | 
| 616 | 
         
            -
                transform: scale(1. 
     | 
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 617 | 
         
             
            }
         
     | 
| 618 | 
         
             
            """
         
     | 
| 619 | 
         | 
| 
         @@ -638,7 +649,7 @@ with gr.Blocks(css=css, title="Gemma3-R1945-27B") as demo: 
     | 
|
| 638 | 
         
             
                # ๋ด๋ถ์ ์ผ๋ก ์ฐ์ด์ง๋ง ํ๋ฉด์๋ ๋
ธ์ถ๋์ง ์๋๋ก ์ค์ 
         
     | 
| 639 | 
         
             
                system_prompt_box = gr.Textbox(
         
     | 
| 640 | 
         
             
                    lines=3,
         
     | 
| 641 | 
         
            -
                    value="You are a deep thinking AI, you may use extremely long chains of thought to deeply consider the problem and deliberate with yourself via systematic reasoning processes to help come to a correct solution prior to answering.  
     | 
| 642 | 
         
             
                    visible=False  # ํ๋ฉด์์ ๊ฐ์ถค
         
     | 
| 643 | 
         
             
                )
         
     | 
| 644 | 
         | 
| 
         @@ -695,4 +706,4 @@ with gr.Blocks(css=css, title="Gemma3-R1945-27B") as demo: 
     | 
|
| 695 | 
         | 
| 696 | 
         
             
            if __name__ == "__main__":
         
     | 
| 697 | 
         
             
                # ๋ก์ปฌ์์๋ง ์คํ ์
         
     | 
| 698 | 
         
            -
                demo.launch()
         
     | 
| 
         | 
|
| 142 | 
         
             
                            page_text = page.extract_text() or ""
         
     | 
| 143 | 
         
             
                            page_text = page_text.strip()
         
     | 
| 144 | 
         
             
                            if page_text:
         
     | 
| 
         | 
|
| 145 | 
         
             
                                if len(page_text) > MAX_CONTENT_CHARS // max_pages:
         
     | 
| 146 | 
         
             
                                    page_text = page_text[:MAX_CONTENT_CHARS // max_pages] + "...(truncated)"
         
     | 
| 147 | 
         
             
                                text_chunks.append(f"## Page {page_num+1}\n\n{page_text}\n")
         
     | 
| 
         | 
|
| 277 | 
         
             
                    elif part.strip():
         
     | 
| 278 | 
         
             
                        content.append({"type": "text", "text": part.strip()})
         
     | 
| 279 | 
         
             
                    else:
         
     | 
| 
         | 
|
| 280 | 
         
             
                        if isinstance(part, str) and part != "<image>":
         
     | 
| 281 | 
         
             
                            content.append({"type": "text", "text": part})
         
     | 
| 282 | 
         
             
                return content
         
     | 
| 
         | 
|
| 329 | 
         | 
| 330 | 
         
             
                if "<image>" in message["text"] and image_files:
         
     | 
| 331 | 
         
             
                    interleaved_content = process_interleaved_images({"text": message["text"], "files": image_files})
         
     | 
| 
         | 
|
| 332 | 
         
             
                    if content_list and content_list[0]["type"] == "text":
         
     | 
| 333 | 
         
             
                        content_list = content_list[1:]
         
     | 
| 334 | 
         
             
                    return interleaved_content + content_list
         
     | 
| 
         | 
|
| 567 | 
         
             
            # Gradio UI (Blocks) ๊ตฌ์ฑ (์ข์ธก ์ฌ์ด๋ ๋ฉ๋ด ์์ด ์ ์ฒดํ๋ฉด ์ฑํ
)
         
     | 
| 568 | 
         
             
            ##############################################################################
         
     | 
| 569 | 
         
             
            css = """
         
     | 
| 570 | 
         
            +
            /* 1) UI๋ฅผ ์ฒ์๋ถํฐ ๊ฐ์ฅ ๋๊ฒ (width 100%) ๊ณ ์ ํ์ฌ ํ์ */
         
     | 
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 571 | 
         
             
            .gradio-container {
         
     | 
| 572 | 
         
             
                background: rgba(255, 255, 255, 0.95);
         
     | 
| 573 | 
         
             
                border-radius: 15px;
         
     | 
| 574 | 
         
             
                padding: 30px 40px;
         
     | 
| 575 | 
         
             
                box-shadow: 0 8px 30px rgba(0, 0, 0, 0.3);
         
     | 
| 576 | 
         
            +
                margin: 20px auto;  /* ์์๋ ์ฌ๋ฐฑ๋ง ์ ์ง */
         
     | 
| 577 | 
         
            +
                width: 100% !important;
         
     | 
| 578 | 
         
            +
                max-width: none !important; /* 1200px ์ ํ ์ ๊ฑฐ */
         
     | 
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 579 | 
         
             
            }
         
     | 
| 580 | 
         
            +
             
     | 
| 581 | 
         
             
            .fillable {
         
     | 
| 582 | 
         
            +
                width: 100% !important; 
         
     | 
| 583 | 
         
            +
                max-width: 100% !important; 
         
     | 
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 584 | 
         
             
            }
         
     | 
| 585 | 
         
            +
             
     | 
| 586 | 
         
            +
            /* 2) ๋ฐฐ๊ฒฝ์ ์ฐํ๊ณ  ํฌ๋ช
ํ ํ์คํ
 ํค ๊ทธ๋ผ๋์ธํธ๋ก ๋ณ๊ฒฝ */
         
     | 
| 587 | 
         
            +
            body {
         
     | 
| 588 | 
         
            +
                background: linear-gradient(
         
     | 
| 589 | 
         
            +
                    135deg,
         
     | 
| 590 | 
         
            +
                    rgba(255, 229, 210, 0.6),
         
     | 
| 591 | 
         
            +
                    rgba(255, 240, 245, 0.6)
         
     | 
| 592 | 
         
            +
                );
         
     | 
| 593 | 
         
            +
                margin: 0;
         
     | 
| 594 | 
         
            +
                padding: 0;
         
     | 
| 595 | 
         
            +
                font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
         
     | 
| 596 | 
         
            +
                color: #333;
         
     | 
| 597 | 
         
             
            }
         
     | 
| 598 | 
         
            +
             
     | 
| 599 | 
         
            +
            /* ๋ฒํผ ์์๋ ๊ธฐ์กด์ ์ง์ ๋ถ์-์ฃผํฉ โ ํ์คํ
 ๊ณ์ด๋ก ์ฐํ๊ฒ */
         
     | 
| 600 | 
         
             
            button, .btn {
         
     | 
| 601 | 
         
            +
                background: linear-gradient(
         
     | 
| 602 | 
         
            +
                    90deg,
         
     | 
| 603 | 
         
            +
                    rgba(255, 210, 220, 0.7),
         
     | 
| 604 | 
         
            +
                    rgba(255, 190, 200, 0.7)
         
     | 
| 605 | 
         
            +
                ) !important;
         
     | 
| 606 | 
         
             
                border: none;
         
     | 
| 607 | 
         
            +
                color: #333; /* ๊ธ์ ์ ๋ณด์ด๋๋ก ์ฝ๊ฐ ์งํ ๊ธ์จ */
         
     | 
| 608 | 
         
             
                padding: 12px 24px;
         
     | 
| 609 | 
         
             
                text-transform: uppercase;
         
     | 
| 610 | 
         
             
                font-weight: bold;
         
     | 
| 
         | 
|
| 613 | 
         
             
                cursor: pointer;
         
     | 
| 614 | 
         
             
                transition: transform 0.2s ease-in-out;
         
     | 
| 615 | 
         
             
            }
         
     | 
| 616 | 
         
            +
             
     | 
| 617 | 
         
             
            button:hover, .btn:hover {
         
     | 
| 618 | 
         
            +
                transform: scale(1.03);
         
     | 
| 619 | 
         
            +
            }
         
     | 
| 620 | 
         
            +
             
     | 
| 621 | 
         
            +
            #examples_container {
         
     | 
| 622 | 
         
            +
                margin: auto;
         
     | 
| 623 | 
         
            +
                width: 90%;
         
     | 
| 624 | 
         
            +
            }
         
     | 
| 625 | 
         
            +
             
     | 
| 626 | 
         
            +
            #examples_row {
         
     | 
| 627 | 
         
            +
                justify-content: center;
         
     | 
| 628 | 
         
             
            }
         
     | 
| 629 | 
         
             
            """
         
     | 
| 630 | 
         | 
| 
         | 
|
| 649 | 
         
             
                # ๋ด๋ถ์ ์ผ๋ก ์ฐ์ด์ง๋ง ํ๋ฉด์๋ ๋
ธ์ถ๋์ง ์๋๋ก ์ค์ 
         
     | 
| 650 | 
         
             
                system_prompt_box = gr.Textbox(
         
     | 
| 651 | 
         
             
                    lines=3,
         
     | 
| 652 | 
         
            +
                    value="You are a deep thinking AI, you may use extremely long chains of thought to deeply consider the problem and deliberate with yourself via systematic reasoning processes to help come to a correct solution prior to answering. Please answer in Korean.You have the ability to read English sources, but you **must always speak in Korean**.Even if the search results are in English, answer in Korean.",
         
     | 
| 653 | 
         
             
                    visible=False  # ํ๋ฉด์์ ๊ฐ์ถค
         
     | 
| 654 | 
         
             
                )
         
     | 
| 655 | 
         | 
| 
         | 
|
| 706 | 
         | 
| 707 | 
         
             
            if __name__ == "__main__":
         
     | 
| 708 | 
         
             
                # ๋ก์ปฌ์์๋ง ์คํ ์
         
     | 
| 709 | 
         
            +
                demo.launch()
         
     |