DeryFerd's picture
Rename app (5).py to app.py
0caa1e0 verified
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