DeryFerd commited on
Commit
22cc2f4
·
verified ·
1 Parent(s): f47183e

Upload 2 files

Browse files
Files changed (2) hide show
  1. app (5).py +112 -0
  2. requirements.txt +3 -0
app (5).py ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ try:
3
+ import gradio as gr
4
+ import fitz
5
+ from llama_cpp import Llama
6
+ print("✅ Library berhasil di-install dan di-impor!")
7
+ print(" Sekarang coba jalankan sel-sel berikutnya.")
8
+ except ImportError as e:
9
+ print(f"Terjadi error saat impor: {e}")
10
+
11
+ # Path ke file model GGUF yang sudah Anda tambahkan
12
+ model_path = "/kaggle/input/qwen-3/gguf/4b/1/Qwen3-4B-Q4_K_M.gguf"
13
+
14
+ print("Memulai proses memuat model...")
15
+
16
+ # Konfigurasi dan muat model menggunakan llama-cpp-python
17
+ llm = Llama(
18
+ model_path=model_path,
19
+ n_gpu_layers=-1, # -1 berarti gunakan semua layer GPU yang tersedia, ini kuncinya!
20
+ n_ctx=40960, # Ukuran konteks, 4096 token sudah cukup untuk banyak PDF
21
+ verbose=False # Set ke False agar tidak terlalu banyak log
22
+ )
23
+
24
+ print("🚀 Model berhasil dimuat!")
25
+
26
+ # ================================================================
27
+ # LANGKAH 3 (VERSI DIPERBAIKI): FUNGSI INTI UNTUK MERINGKAS
28
+ # ================================================================
29
+
30
+ def summarize_pdf(pdf_file_obj): # Kita ganti nama variabel agar lebih jelas
31
+ """
32
+ Fungsi ini menerima objek file dari Gradio, membaca isinya,
33
+ dan mengembalikan ringkasan dari model AI.
34
+ """
35
+ if not pdf_file_obj:
36
+ return "Mohon unggah file PDF terlebih dahulu."
37
+
38
+ try:
39
+ # --- Bagian 1: Membaca teks dari PDF ---
40
+ # Perubahan ada di sini! Kita gunakan .name untuk mendapatkan path filenya.
41
+ pdf_path = pdf_file_obj.name
42
+ print(f"Membaca file PDF dari path: {pdf_path}")
43
+
44
+ # Buka file menggunakan path-nya, bukan stream
45
+ doc = fitz.open(pdf_path)
46
+
47
+ full_text = ""
48
+ for page in doc:
49
+ full_text += page.get_text()
50
+
51
+ doc.close()
52
+ print("Teks berhasil diekstrak dari PDF.")
53
+
54
+ # --- Bagian 2: Membuat prompt untuk AI ---
55
+ # Bagian ini tidak berubah
56
+ system_prompt = "Anda adalah asisten AI yang ahli dalam meringkas dokumen. Ringkaslah teks berikut dalam beberapa poin utama yang mudah dimengerti."
57
+
58
+ prompt = f"""
59
+ <|im_start|>system
60
+ {system_prompt}<|im_end|>
61
+ <|im_start|>user
62
+ Teks dokumen: "{full_text}"<|im_end|>
63
+ <|im_start|>assistant
64
+ Tentu, ini adalah ringkasan dari dokumen tersebut:
65
+ """
66
+
67
+ # --- Bagian 3: Memanggil model AI ---
68
+ # Bagian ini juga tidak berubah
69
+ print("Mengirim teks ke model untuk diringkas...")
70
+ output = llm(
71
+ prompt,
72
+ max_tokens=2048,
73
+ stop=["<|im_end|>"],
74
+ echo=False,
75
+ temperature=0.7
76
+ )
77
+
78
+ summary = output['choices'][0]['text'].strip()
79
+ print("Ringkasan berhasil dibuat.")
80
+
81
+ return summary
82
+
83
+ except Exception as e:
84
+ return f"Terjadi kesalahan: {e}"
85
+
86
+ # =============================================
87
+ # LANGKAH 4: BANGUN ANTARMUKA DENGAN GRADIO
88
+ # =============================================
89
+
90
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
91
+ gr.Markdown(
92
+ """
93
+ # 🤖 AI PDF Summarizer (ditenagai oleh Qwen3-4B)
94
+ Unggah file PDF Anda di bawah ini, dan AI akan membuatkan ringkasan untuk Anda.
95
+ """
96
+ )
97
+
98
+ with gr.Row():
99
+ pdf_input = gr.File(label="Upload PDF", file_types=[".pdf"])
100
+ summary_output = gr.Textbox(label="Ringkasan", lines=15)
101
+
102
+ summarize_button = gr.Button("Buat Ringkasan", variant="primary")
103
+
104
+ summarize_button.click(
105
+ fn=summarize_pdf,
106
+ inputs=pdf_input,
107
+ outputs=summary_output
108
+ )
109
+
110
+ # Jalankan aplikasi!
111
+ print("Menjalankan antarmuka Gradio...")
112
+ demo.launch(debug=True) # share=True akan membuat link publik sementara
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ gradio
2
+ PyMuPDF
3
+ llama-cpp-python