Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,14 +1,7 @@
|
|
| 1 |
# ============================================================
|
| 2 |
-
# πΌ CETHA - AI CV REVIEW (JSON
|
| 3 |
-
# ============================================================
|
| 4 |
-
# Aplikasi ini akan:
|
| 5 |
-
# 1. Membaca file CV (PDF)
|
| 6 |
-
# 2. Mengekstrak teks dengan PyMuPDF
|
| 7 |
-
# 3. Mengirim prompt ke model Gemini
|
| 8 |
-
# 4. Menghasilkan hasil JSON berisi poin kelebihan & perbaikan dengan penjelasan
|
| 9 |
# ============================================================
|
| 10 |
|
| 11 |
-
# --- INSTALL DEPENDENCIES (Hanya aktif di Hugging Face atau Colab) ---
|
| 12 |
# !pip install -q gradio google-generativeai pymupdf
|
| 13 |
|
| 14 |
import gradio as gr
|
|
@@ -60,11 +53,11 @@ def clean_and_parse_json(raw_text):
|
|
| 60 |
|
| 61 |
|
| 62 |
# ============================================================
|
| 63 |
-
# π― FUNGSI UTAMA: PENILAIAN CV
|
| 64 |
# ============================================================
|
| 65 |
|
| 66 |
def score_cv_json(cv_file):
|
| 67 |
-
"""Menilai CV dan mengembalikan hasil dalam format JSON dengan detail
|
| 68 |
if not API_CONFIGURED:
|
| 69 |
raise gr.Error("API Key Gemini belum terkonfigurasi. Periksa Logs aplikasi di Hugging Face.")
|
| 70 |
if cv_file is None:
|
|
@@ -90,14 +83,24 @@ def score_cv_json(cv_file):
|
|
| 90 |
---
|
| 91 |
|
| 92 |
Tugas Anda:
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 100 |
{{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
"highlights": [
|
| 102 |
{{
|
| 103 |
"point": "judul kelebihan singkat",
|
|
@@ -114,7 +117,7 @@ def score_cv_json(cv_file):
|
|
| 114 |
]
|
| 115 |
}}
|
| 116 |
|
| 117 |
-
Pastikan output
|
| 118 |
"""
|
| 119 |
|
| 120 |
print("π€ Mengirim prompt ke Gemini...")
|
|
@@ -135,17 +138,18 @@ def score_cv_json(cv_file):
|
|
| 135 |
# ============================================================
|
| 136 |
|
| 137 |
with gr.Blocks(theme=gr.themes.Soft()) as demo:
|
| 138 |
-
gr.Markdown("# π€ CETHA - AI CV Review (JSON Output)")
|
| 139 |
gr.Markdown(
|
| 140 |
"""
|
| 141 |
-
Upload CV Anda
|
| 142 |
-
Sistem akan memberikan
|
|
|
|
| 143 |
"""
|
| 144 |
)
|
| 145 |
|
| 146 |
cv_pdf = gr.File(label="π Upload CV Anda (PDF)", file_types=[".pdf"])
|
| 147 |
score_button = gr.Button("π Analisis CV Sekarang", variant="primary")
|
| 148 |
-
output_json = gr.JSON(label="π Hasil Analisis (JSON)")
|
| 149 |
|
| 150 |
score_button.click(
|
| 151 |
fn=score_cv_json,
|
|
|
|
| 1 |
# ============================================================
|
| 2 |
+
# πΌ CETHA - AI CV REVIEW (FINAL JSON VERSION with SCORE)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
# ============================================================
|
| 4 |
|
|
|
|
| 5 |
# !pip install -q gradio google-generativeai pymupdf
|
| 6 |
|
| 7 |
import gradio as gr
|
|
|
|
| 53 |
|
| 54 |
|
| 55 |
# ============================================================
|
| 56 |
+
# π― FUNGSI UTAMA: PENILAIAN CV DENGAN SKOR DAN DETAIL
|
| 57 |
# ============================================================
|
| 58 |
|
| 59 |
def score_cv_json(cv_file):
|
| 60 |
+
"""Menilai CV dan mengembalikan hasil dalam format JSON dengan skor dan penjelasan detail."""
|
| 61 |
if not API_CONFIGURED:
|
| 62 |
raise gr.Error("API Key Gemini belum terkonfigurasi. Periksa Logs aplikasi di Hugging Face.")
|
| 63 |
if cv_file is None:
|
|
|
|
| 83 |
---
|
| 84 |
|
| 85 |
Tugas Anda:
|
| 86 |
+
1. Nilai CV berdasarkan 3 kategori (0β100):
|
| 87 |
+
- "kelengkapan_informasi": Apakah CV mencakup nama, kontak, pengalaman, pendidikan, dan keterampilan?
|
| 88 |
+
- "keterbacaan_dan_format": Apakah struktur, urutan, dan tampilan CV rapi dan mudah dibaca?
|
| 89 |
+
- "dampak_pengalaman_kerja": Apakah deskripsi pengalaman menonjolkan hasil terukur (angka, pencapaian)?
|
| 90 |
+
2. Hitung "skor_keseluruhan" sebagai rata-rata dari ketiga kategori.
|
| 91 |
+
3. Temukan 3 KELEBIHAN utama dan 3 HAL YANG DAPAT DITINGKATKAN.
|
| 92 |
+
Setiap poin memiliki:
|
| 93 |
+
- "point": kalimat ringkas yang mewakili kelebihan/perbaikan.
|
| 94 |
+
- "explanation": penjelasan singkat (1β3 kalimat) tentang konteks atau alasannya.
|
| 95 |
+
|
| 96 |
+
Format output JSON yang harus dikembalikan:
|
| 97 |
{{
|
| 98 |
+
"skor_keseluruhan": <angka>,
|
| 99 |
+
"penilaian_per_kategori": {{
|
| 100 |
+
"kelengkapan_informasi": <angka>,
|
| 101 |
+
"keterbacaan_dan_format": <angka>,
|
| 102 |
+
"dampak_pengalaman_kerja": <angka>
|
| 103 |
+
}},
|
| 104 |
"highlights": [
|
| 105 |
{{
|
| 106 |
"point": "judul kelebihan singkat",
|
|
|
|
| 117 |
]
|
| 118 |
}}
|
| 119 |
|
| 120 |
+
Pastikan output hanya berupa JSON valid tanpa tambahan teks lain.
|
| 121 |
"""
|
| 122 |
|
| 123 |
print("π€ Mengirim prompt ke Gemini...")
|
|
|
|
| 138 |
# ============================================================
|
| 139 |
|
| 140 |
with gr.Blocks(theme=gr.themes.Soft()) as demo:
|
| 141 |
+
gr.Markdown("# π€ CETHA - AI CV Review (JSON Output with Score)")
|
| 142 |
gr.Markdown(
|
| 143 |
"""
|
| 144 |
+
Upload CV Anda dalam format **PDF** untuk mendapatkan hasil analisis otomatis berbasis AI.
|
| 145 |
+
Sistem akan memberikan **skor keseluruhan**, **penilaian per kategori**,
|
| 146 |
+
serta **3 poin kelebihan dan 3 poin perbaikan lengkap dengan penjelasan.**
|
| 147 |
"""
|
| 148 |
)
|
| 149 |
|
| 150 |
cv_pdf = gr.File(label="π Upload CV Anda (PDF)", file_types=[".pdf"])
|
| 151 |
score_button = gr.Button("π Analisis CV Sekarang", variant="primary")
|
| 152 |
+
output_json = gr.JSON(label="π Hasil Analisis (JSON Lengkap)")
|
| 153 |
|
| 154 |
score_button.click(
|
| 155 |
fn=score_cv_json,
|