Add version chip, update counter, changelog, and update-tracking skill guide
Browse files- CHANGELOG.md +7 -0
- README.md +10 -0
- app.py +22 -0
- skills/update-tracking/SKILL.md +16 -0
CHANGELOG.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Changelog
|
| 2 |
+
|
| 3 |
+
## Update ke-13 - 2026-04-15
|
| 4 |
+
- Tambah penanda versi kecil di UI: `Versi v0.9.0 | Minor Update ke-13`.
|
| 5 |
+
- Tambah build info di bagian bawah halaman untuk validasi versi saat demo.
|
| 6 |
+
- Tetapkan standar pelaporan update agar setiap respons menyertakan nomor update.
|
| 7 |
+
- Fitur utama sebelumnya tetap: label person bernomor, training live terminal, grafik training matplotlib, overwrite `best.pt`.
|
README.md
CHANGED
|
@@ -59,6 +59,16 @@ Catatan:
|
|
| 59 |
- `requirements.txt` - dependensi
|
| 60 |
- `yolov8n.pt` - model default
|
| 61 |
- `.gitignore` - aturan ignore
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
|
| 63 |
Opsional environment variable:
|
| 64 |
- `MODEL_PATH` - path model lokal custom
|
|
|
|
| 59 |
- `requirements.txt` - dependensi
|
| 60 |
- `yolov8n.pt` - model default
|
| 61 |
- `.gitignore` - aturan ignore
|
| 62 |
+
- `CHANGELOG.md` - riwayat update (termasuk nomor update)
|
| 63 |
+
- `skills/update-tracking/SKILL.md` - panduan konsistensi versi & format update
|
| 64 |
+
|
| 65 |
+
## Tracking Versi
|
| 66 |
+
|
| 67 |
+
- UI menampilkan versi kecil di bagian atas dan bawah halaman.
|
| 68 |
+
- Konfigurasi versi ada di `app.py`:
|
| 69 |
+
- `APP_VERSION`
|
| 70 |
+
- `APP_MINOR_UPDATE`
|
| 71 |
+
- Setiap perubahan sebaiknya menambah entri `CHANGELOG.md`.
|
| 72 |
|
| 73 |
Opsional environment variable:
|
| 74 |
- `MODEL_PATH` - path model lokal custom
|
app.py
CHANGED
|
@@ -21,6 +21,8 @@ from ultralytics import YOLO
|
|
| 21 |
|
| 22 |
CM_INIT = {"tp": 0, "fp": 0, "fn": 0, "tn": 0}
|
| 23 |
EVAL_CLASSES = ["Sesuai", "Tidak Sesuai"]
|
|
|
|
|
|
|
| 24 |
|
| 25 |
|
| 26 |
# Gradio/Spaces can trigger noisy asyncio cleanup traces ("Invalid file descriptor: -1")
|
|
@@ -968,6 +970,11 @@ CUSTOM_CSS = """
|
|
| 968 |
.section-box {padding: 14px; border: 1px solid #d7dee8; border-radius: 10px; background: #ffffff;}
|
| 969 |
.method-box {padding: 14px; border: 1px solid #c7d2e3; border-radius: 10px; background: #f8fbff;}
|
| 970 |
.section-title {margin-bottom: 4px !important;}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 971 |
"""
|
| 972 |
|
| 973 |
|
|
@@ -980,6 +987,13 @@ with gr.Blocks(title="Pengecekan dan Klasifikasi Mahasiswa - YOLOv8") as demo:
|
|
| 980 |
</p>
|
| 981 |
"""
|
| 982 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 983 |
|
| 984 |
with gr.Column(elem_classes=["method-box"]):
|
| 985 |
gr.Markdown(
|
|
@@ -1104,6 +1118,14 @@ with gr.Blocks(title="Pengecekan dan Klasifikasi Mahasiswa - YOLOv8") as demo:
|
|
| 1104 |
outputs=[train_log, best_model_file, train_curve],
|
| 1105 |
)
|
| 1106 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1107 |
|
| 1108 |
if __name__ == "__main__":
|
| 1109 |
if _env_true("HF_AUTOSYNC_ENABLED", default=False):
|
|
|
|
| 21 |
|
| 22 |
CM_INIT = {"tp": 0, "fp": 0, "fn": 0, "tn": 0}
|
| 23 |
EVAL_CLASSES = ["Sesuai", "Tidak Sesuai"]
|
| 24 |
+
APP_VERSION = os.getenv("APP_VERSION", "v0.9.0")
|
| 25 |
+
APP_MINOR_UPDATE = os.getenv("APP_MINOR_UPDATE", "13")
|
| 26 |
|
| 27 |
|
| 28 |
# Gradio/Spaces can trigger noisy asyncio cleanup traces ("Invalid file descriptor: -1")
|
|
|
|
| 970 |
.section-box {padding: 14px; border: 1px solid #d7dee8; border-radius: 10px; background: #ffffff;}
|
| 971 |
.method-box {padding: 14px; border: 1px solid #c7d2e3; border-radius: 10px; background: #f8fbff;}
|
| 972 |
.section-title {margin-bottom: 4px !important;}
|
| 973 |
+
.version-chip {
|
| 974 |
+
display:inline-block; padding:4px 10px; border:1px solid #c7d2e3; border-radius:999px;
|
| 975 |
+
font-size:12px; color:#334155; background:#f8fbff; margin-top:4px;
|
| 976 |
+
}
|
| 977 |
+
.version-foot {font-size:12px; color:#64748b; text-align:center; margin-top:8px;}
|
| 978 |
"""
|
| 979 |
|
| 980 |
|
|
|
|
| 987 |
</p>
|
| 988 |
"""
|
| 989 |
)
|
| 990 |
+
gr.HTML(
|
| 991 |
+
f"""
|
| 992 |
+
<div style="text-align:center;">
|
| 993 |
+
<span class="version-chip">Versi {APP_VERSION} | Minor Update ke-{APP_MINOR_UPDATE}</span>
|
| 994 |
+
</div>
|
| 995 |
+
"""
|
| 996 |
+
)
|
| 997 |
|
| 998 |
with gr.Column(elem_classes=["method-box"]):
|
| 999 |
gr.Markdown(
|
|
|
|
| 1118 |
outputs=[train_log, best_model_file, train_curve],
|
| 1119 |
)
|
| 1120 |
|
| 1121 |
+
gr.HTML(
|
| 1122 |
+
f"""
|
| 1123 |
+
<div class="version-foot">
|
| 1124 |
+
Build info: {APP_VERSION} (minor update ke-{APP_MINOR_UPDATE})
|
| 1125 |
+
</div>
|
| 1126 |
+
"""
|
| 1127 |
+
)
|
| 1128 |
+
|
| 1129 |
|
| 1130 |
if __name__ == "__main__":
|
| 1131 |
if _env_true("HF_AUTOSYNC_ENABLED", default=False):
|
skills/update-tracking/SKILL.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# SKILL: Update Tracking Consistency
|
| 2 |
+
|
| 3 |
+
Tujuan:
|
| 4 |
+
- Menjaga konsistensi nomor versi dan minor update di UI serta respons asisten.
|
| 5 |
+
|
| 6 |
+
Aturan:
|
| 7 |
+
1. Setiap perubahan signifikan wajib menaikkan `APP_MINOR_UPDATE` di `app.py`.
|
| 8 |
+
2. Jika perubahan besar, naikkan `APP_VERSION` (misal `v0.9.x -> v1.0.0`).
|
| 9 |
+
3. Tambahkan entri baru di `CHANGELOG.md` dengan format `Update ke-<n> - YYYY-MM-DD`.
|
| 10 |
+
4. Pada respons ke user, sertakan baris ringkas: `Update ke-<n>`.
|
| 11 |
+
|
| 12 |
+
Checklist cepat sebelum deploy:
|
| 13 |
+
- [ ] `APP_VERSION` dan `APP_MINOR_UPDATE` sinkron
|
| 14 |
+
- [ ] `CHANGELOG.md` ditambah
|
| 15 |
+
- [ ] UI menampilkan versi di header/footer
|
| 16 |
+
- [ ] deploy ke Space selesai
|