Spaces:
Build error
Build error
| try: | |
| import gradio as gr | |
| import fitz | |
| from llama_cpp import Llama | |
| print("β Library berhasil di-install dan di-impor!") | |
| print(" Sekarang coba jalankan sel-sel berikutnya.") | |
| except ImportError as e: | |
| print(f"Terjadi error saat impor: {e}") | |
| # Path ke file model GGUF yang sudah Anda tambahkan | |
| model_path = "/kaggle/input/qwen-3/gguf/4b/1/Qwen3-4B-Q4_K_M.gguf" | |
| print("Memulai proses memuat model...") | |
| # Konfigurasi dan muat model menggunakan llama-cpp-python | |
| llm = Llama( | |
| model_path=model_path, | |
| n_gpu_layers=-1, # -1 berarti gunakan semua layer GPU yang tersedia, ini kuncinya! | |
| n_ctx=40960, # Ukuran konteks, 4096 token sudah cukup untuk banyak PDF | |
| verbose=False # Set ke False agar tidak terlalu banyak log | |
| ) | |
| print("π Model berhasil dimuat!") | |
| # ================================================================ | |
| # LANGKAH 3 (VERSI DIPERBAIKI): FUNGSI INTI UNTUK MERINGKAS | |
| # ================================================================ | |
| def summarize_pdf(pdf_file_obj): # Kita ganti nama variabel agar lebih jelas | |
| """ | |
| Fungsi ini menerima objek file dari Gradio, membaca isinya, | |
| dan mengembalikan ringkasan dari model AI. | |
| """ | |
| if not pdf_file_obj: | |
| return "Mohon unggah file PDF terlebih dahulu." | |
| try: | |
| # --- Bagian 1: Membaca teks dari PDF --- | |
| # Perubahan ada di sini! Kita gunakan .name untuk mendapatkan path filenya. | |
| pdf_path = pdf_file_obj.name | |
| print(f"Membaca file PDF dari path: {pdf_path}") | |
| # Buka file menggunakan path-nya, bukan stream | |
| doc = fitz.open(pdf_path) | |
| full_text = "" | |
| for page in doc: | |
| full_text += page.get_text() | |
| doc.close() | |
| print("Teks berhasil diekstrak dari PDF.") | |
| # --- Bagian 2: Membuat prompt untuk AI --- | |
| # Bagian ini tidak berubah | |
| system_prompt = "Anda adalah asisten AI yang ahli dalam meringkas dokumen. Ringkaslah teks berikut dalam beberapa poin utama yang mudah dimengerti." | |
| prompt = f""" | |
| <|im_start|>system | |
| {system_prompt}<|im_end|> | |
| <|im_start|>user | |
| Teks dokumen: "{full_text}"<|im_end|> | |
| <|im_start|>assistant | |
| Tentu, ini adalah ringkasan dari dokumen tersebut: | |
| """ | |
| # --- Bagian 3: Memanggil model AI --- | |
| # Bagian ini juga tidak berubah | |
| print("Mengirim teks ke model untuk diringkas...") | |
| output = llm( | |
| prompt, | |
| max_tokens=2048, | |
| stop=["<|im_end|>"], | |
| echo=False, | |
| temperature=0.7 | |
| ) | |
| summary = output['choices'][0]['text'].strip() | |
| print("Ringkasan berhasil dibuat.") | |
| return summary | |
| except Exception as e: | |
| return f"Terjadi kesalahan: {e}" | |
| # ============================================= | |
| # LANGKAH 4: BANGUN ANTARMUKA DENGAN GRADIO | |
| # ============================================= | |
| with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
| gr.Markdown( | |
| """ | |
| # π€ AI PDF Summarizer (ditenagai oleh Qwen3-4B) | |
| Unggah file PDF Anda di bawah ini, dan AI akan membuatkan ringkasan untuk Anda. | |
| """ | |
| ) | |
| with gr.Row(): | |
| pdf_input = gr.File(label="Upload PDF", file_types=[".pdf"]) | |
| summary_output = gr.Textbox(label="Ringkasan", lines=15) | |
| summarize_button = gr.Button("Buat Ringkasan", variant="primary") | |
| summarize_button.click( | |
| fn=summarize_pdf, | |
| inputs=pdf_input, | |
| outputs=summary_output | |
| ) | |
| # Jalankan aplikasi! | |
| print("Menjalankan antarmuka Gradio...") | |
| demo.launch(debug=True) # share=True akan membuat link publik sementara | |