Update app.py
Browse files
app.py
CHANGED
|
@@ -12,7 +12,7 @@ import csv
|
|
| 12 |
import pandas as pd
|
| 13 |
import threading
|
| 14 |
from PIL import Image, ImageEnhance
|
| 15 |
-
from pathlib import Path
|
| 16 |
|
| 17 |
# --- LIBRARY BARU UNTUK FITUR UPGRADE ---
|
| 18 |
try:
|
|
@@ -199,7 +199,7 @@ class GeminiChat:
|
|
| 199 |
try:
|
| 200 |
selected_key = random.choice(self.api_keys)
|
| 201 |
genai.configure(api_key=selected_key)
|
| 202 |
-
model = genai.GenerativeModel('gemini-
|
| 203 |
full_prompt = message
|
| 204 |
if system_prompt:
|
| 205 |
full_prompt = f"{system_prompt}\n\nUser query: {message}"
|
|
@@ -264,18 +264,31 @@ def submit_report(name, email, message):
|
|
| 264 |
print("β
Laporan baru telah disimpan ke reports.log")
|
| 265 |
return gr.update(value="β
Terima kasih! Laporan Anda telah kami terima.", visible=True)
|
| 266 |
|
| 267 |
-
# --- FUNGSI VISITOR MONITOR (DENGAN PERBAIKAN) ---
|
| 268 |
def update_visitor_monitor(time_filter: str):
|
| 269 |
try:
|
| 270 |
with file_lock:
|
| 271 |
-
if not os.path.exists(VISITOR_LOG_FILE) or os.path.getsize(VISITOR_LOG_FILE)
|
| 272 |
return "## π 0", pd.DataFrame({"Timestamp": [], "Total Pengunjung": []})
|
| 273 |
-
|
| 274 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 275 |
|
| 276 |
df['Timestamp'] = pd.to_datetime(df['Timestamp'], errors='coerce')
|
| 277 |
df.dropna(subset=['Timestamp'], inplace=True)
|
| 278 |
-
if df.empty:
|
|
|
|
| 279 |
|
| 280 |
total_overall_visitors = len(df)
|
| 281 |
total_visitors_formatted = f"## π {total_overall_visitors:,}"
|
|
@@ -296,6 +309,7 @@ def update_visitor_monitor(time_filter: str):
|
|
| 296 |
print(f"β {error_message}")
|
| 297 |
return f"## β οΈ Error: {e}", pd.DataFrame({"Error": [error_message]})
|
| 298 |
|
|
|
|
| 299 |
# --- FUNGSI-FUNGSI FITUR BARU ---
|
| 300 |
def enhance_prompt(simple_prompt):
|
| 301 |
if not simple_prompt:
|
|
@@ -562,11 +576,10 @@ with gr.Blocks(theme=gr.themes.Base(), head=HEAD_HTML) as demo:
|
|
| 562 |
with gr.Row(variant='panel'): gr.Markdown("""## Cara Menjadi "Art Director" yang Hebat untuk AI...\n (Konten panduan Anda di sini)""")
|
| 563 |
with gr.TabItem("π Blog & Updates", id=9):
|
| 564 |
with gr.Row(variant='panel'): gr.Markdown("""### Perkembangan Terbaru dari RenXploit's AI Suite
|
| 565 |
-
- **v2.
|
|
|
|
| 566 |
- **v2.4:** Upscaler di-upgrade dengan kontrol kejernihan, Visitor Monitor diperbaiki, dan UI Settings diperjelas.
|
| 567 |
-
- **v2.3:** Perbaikan bug
|
| 568 |
-
- **v2.2:** Perbaikan bug untuk kompatibilitas Gradio.
|
| 569 |
-
- **v2.1:** Menambahkan **Prompt Enhancer**, **AI Image Upscaler**, dan **Live System Monitor**.
|
| 570 |
- **v2.0:** Perombakan Desain Total.
|
| 571 |
- **Rencana Berikutnya:** Menjajaki model generator gambar yang berbeda dan fitur Inpainting/Outpainting. Nantikan!""")
|
| 572 |
with gr.TabItem("βΉοΈ About & Support", id=10):
|
|
|
|
| 12 |
import pandas as pd
|
| 13 |
import threading
|
| 14 |
from PIL import Image, ImageEnhance
|
| 15 |
+
from pathlib import Path
|
| 16 |
|
| 17 |
# --- LIBRARY BARU UNTUK FITUR UPGRADE ---
|
| 18 |
try:
|
|
|
|
| 199 |
try:
|
| 200 |
selected_key = random.choice(self.api_keys)
|
| 201 |
genai.configure(api_key=selected_key)
|
| 202 |
+
model = genai.GenerativeModel('gemini-2.5-flash')
|
| 203 |
full_prompt = message
|
| 204 |
if system_prompt:
|
| 205 |
full_prompt = f"{system_prompt}\n\nUser query: {message}"
|
|
|
|
| 264 |
print("β
Laporan baru telah disimpan ke reports.log")
|
| 265 |
return gr.update(value="β
Terima kasih! Laporan Anda telah kami terima.", visible=True)
|
| 266 |
|
| 267 |
+
# --- FUNGSI VISITOR MONITOR (DENGAN PERBAIKAN FINAL) ---
|
| 268 |
def update_visitor_monitor(time_filter: str):
|
| 269 |
try:
|
| 270 |
with file_lock:
|
| 271 |
+
if not os.path.exists(VISITOR_LOG_FILE) or os.path.getsize(VISITOR_LOG_FILE) == 0:
|
| 272 |
return "## π 0", pd.DataFrame({"Timestamp": [], "Total Pengunjung": []})
|
| 273 |
+
|
| 274 |
+
# --- PERBAIKAN UTAMA ---
|
| 275 |
+
# Secara eksplisit berikan nama kolom untuk menghindari KeyError
|
| 276 |
+
# jika file tidak memiliki header.
|
| 277 |
+
column_names = ["Timestamp", "IP Address", "User Agent"]
|
| 278 |
+
df = pd.read_csv(VISITOR_LOG_FILE, header=None, names=column_names)
|
| 279 |
+
|
| 280 |
+
# Jika baris header terbaca sebagai data, buang baris tersebut.
|
| 281 |
+
if df.iloc[0]['Timestamp'] == 'Timestamp':
|
| 282 |
+
df = df.iloc[1:].reset_index(drop=True)
|
| 283 |
+
|
| 284 |
+
# Periksa lagi apakah DataFrame kosong setelah membuang header
|
| 285 |
+
if df.empty:
|
| 286 |
+
return "## π 0", pd.DataFrame({"Timestamp": [], "Total Pengunjung": []})
|
| 287 |
|
| 288 |
df['Timestamp'] = pd.to_datetime(df['Timestamp'], errors='coerce')
|
| 289 |
df.dropna(subset=['Timestamp'], inplace=True)
|
| 290 |
+
if df.empty:
|
| 291 |
+
return "## π 0", pd.DataFrame({"Timestamp": [], "Total Pengunjung": []})
|
| 292 |
|
| 293 |
total_overall_visitors = len(df)
|
| 294 |
total_visitors_formatted = f"## π {total_overall_visitors:,}"
|
|
|
|
| 309 |
print(f"β {error_message}")
|
| 310 |
return f"## β οΈ Error: {e}", pd.DataFrame({"Error": [error_message]})
|
| 311 |
|
| 312 |
+
|
| 313 |
# --- FUNGSI-FUNGSI FITUR BARU ---
|
| 314 |
def enhance_prompt(simple_prompt):
|
| 315 |
if not simple_prompt:
|
|
|
|
| 576 |
with gr.Row(variant='panel'): gr.Markdown("""## Cara Menjadi "Art Director" yang Hebat untuk AI...\n (Konten panduan Anda di sini)""")
|
| 577 |
with gr.TabItem("π Blog & Updates", id=9):
|
| 578 |
with gr.Row(variant='panel'): gr.Markdown("""### Perkembangan Terbaru dari RenXploit's AI Suite
|
| 579 |
+
- **v2.6 (Pembaruan Terkini):** Perbaikan final untuk bug `KeyError: 'Timestamp'` pada Visitor Monitor, membuatnya lebih tahan banting terhadap format file CSV.
|
| 580 |
+
- **v2.5:** Menambahkan **Galeri & Riwayat Generasi** dan **Image Editor** untuk pasca-produksi.
|
| 581 |
- **v2.4:** Upscaler di-upgrade dengan kontrol kejernihan, Visitor Monitor diperbaiki, dan UI Settings diperjelas.
|
| 582 |
+
- **v2.1 - v2.3:** Perbaikan bug dan penambahan fitur inti seperti Prompt Enhancer, Upscaler, dan System Monitor.
|
|
|
|
|
|
|
| 583 |
- **v2.0:** Perombakan Desain Total.
|
| 584 |
- **Rencana Berikutnya:** Menjajaki model generator gambar yang berbeda dan fitur Inpainting/Outpainting. Nantikan!""")
|
| 585 |
with gr.TabItem("βΉοΈ About & Support", id=10):
|