saindras

aplikasi-tjkt-troubleshooting-jaringan.py

Oct 21st, 2025 (edited)
1,066
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.19 KB | None | 0 0
  1. import streamlit as st
  2. import os
  3. import google.generativeai as genai
  4.  
  5. # --- Konfigurasi Halaman Streamlit ---
  6. st.set_page_config(page_title="Troubleshooting Jaringan TJKT", page_icon="🔧", layout="wide")
  7. st.title("🔧 Generator Langkah Troubleshooting Dasar Jaringan")
  8. st.caption("Didukung oleh KA Generatif (Gemini)")
  9.  
  10. # --- Konfigurasi API Key & Model Gemini ---
  11. api_key_checked = False
  12. model = None
  13.  
  14. # --- Fungsi untuk Inisialisasi Model (Dipanggil saat dibutuhkan) ---
  15. def initialize_model():
  16.     global model, api_key_checked
  17.     if model is None and not api_key_checked: # Hanya inisialisasi sekali
  18.         api_key_checked = True # Tandai sudah dicek
  19.         try:
  20.             # Menggunakan GOOGLE_API_KEY
  21.             api_key = os.environ['GOOGLE_API_KEY']
  22.             genai.configure(api_key=api_key)
  23.             # Menggunakan model LLM Gemini
  24.             model = genai.GenerativeModel('models/gemini-2.0-flash-lite')
  25.             st.success("API Key & Model KA berhasil dikonfigurasi.")
  26.             return True # Berhasil
  27.         except KeyError:
  28.             st.error("Error: GOOGLE_API_KEY tidak ditemukan di Replit Secrets.")
  29.             st.info("Pastikan Anda sudah menambahkan GOOGLE_API_KEY ke bagian Secrets di Replit.")
  30.             return False # Gagal
  31.         except Exception as e:
  32.             st.error(f"Error saat mengkonfigurasi atau memuat model KA: {e}")
  33.             return False # Gagal
  34.     elif model is not None:
  35.          return True # Sudah terinisialisasi sebelumnya
  36.     else:
  37.          # Jika api_key_checked True tapi model masih None, berarti gagal sebelumnya
  38.          st.error("Konfigurasi API Key gagal sebelumnya. Periksa Secrets dan refresh halaman.")
  39.          return False
  40.  
  41. # --- Fungsi untuk Membuat Prompt Troubleshooting ---
  42. def buat_prompt_troubleshooting(masalah):
  43.     # Prompt spesifik untuk langkah troubleshooting
  44.     return f"""
  45.    Anda adalah seorang Network Engineer Senior yang sangat berpengalaman dalam troubleshooting jaringan dan sabar membimbing teknisi junior (siswa SMK TJKT). Anda berpikir secara sistematis dan logis.
  46.  
  47.    Seorang siswa melaporkan masalah jaringan berikut: '{masalah}'
  48.  
  49.    Tugas Anda:
  50.    Buatlah daftar langkah-langkah troubleshooting dasar yang **sistematis dan berurutan** (mulai dari lapisan fisik jika memungkinkan) untuk membantu siswa mendiagnosis masalah tersebut. Fokus pada langkah-langkah **awal** yang bisa dilakukan dengan alat standar (seperti command prompt/terminal) atau pemeriksaan visual.
  51.  
  52.    Instruksi Spesifik:
  53.    1.  Berikan **maksimal 6 langkah** troubleshooting yang paling relevan dan logis untuk masalah '{masalah}'.
  54.    2.  Setiap langkah harus berupa **tindakan spesifik** yang bisa dilakukan siswa (misal: "Periksa lampu indikator pada modem/router", "Lakukan ping ke alamat IP 8.8.8.8").
  55.    3.  Berikan **penjelasan singkat (1 kalimat)** untuk setiap langkah, menjelaskan **tujuan** dari langkah tersebut.
  56.    4.  Urutkan langkah-langkah dari yang paling dasar/fisik menuju yang lebih logikal/software.
  57.    5.  Gunakan bahasa yang jelas dan instruktif.
  58.  
  59.    Format Jawaban (Gunakan Markdown):
  60.  
  61.    ### Langkah Troubleshooting Dasar untuk: {masalah}
  62.  
  63.    Berikut adalah langkah-langkah awal yang bisa dicoba secara berurutan:
  64.  
  65.    1.  **Langkah 1: [Nama Tindakan]**
  66.        * _Tujuan:_ [Penjelasan singkat tujuan langkah ini, 1 kalimat].
  67.    2.  **Langkah 2: [Nama Tindakan]**
  68.        * _Tujuan:_ [Penjelasan singkat tujuan langkah ini, 1 kalimat].
  69.    3.  **Langkah 3: [Nama Tindakan]**
  70.        * _Tujuan:_ [Penjelasan singkat tujuan langkah ini, 1 kalimat].
  71.    ... (dan seterusnya, maksimal 6)
  72.  
  73.    ---
  74.    **Penting:**
  75.    * Lakukan langkah-langkah ini secara **berurutan**. Jika masalah teratasi di satu langkah, Anda mungkin tidak perlu melanjutkan ke langkah berikutnya.
  76.    * Ini adalah panduan **dasar**. Masalah jaringan bisa kompleks. Jika langkah-langkah ini tidak berhasil, catat hasil dari setiap langkah dan konsultasikan dengan guru atau teknisi yang lebih berpengalaman.
  77.    """
  78.  
  79. # --- Interface Pengguna Streamlit ---
  80. st.subheader("Deskripsikan Masalah Jaringan yang Dihadapi:")
  81. masalah_input = st.text_area("Contoh: Laptop tidak bisa konek ke WiFi sekolah, Internet lambat saat browsing, Tidak bisa ping ke google.com", height=100)
  82.  
  83. troubleshoot_button = st.button("Mulai Troubleshooting", type="primary")
  84.  
  85. # --- Logika Saat Tombol Ditekan ---
  86. if troubleshoot_button:
  87.     # ---- Panggil Inisialisasi Model DI SINI ----
  88.     model_ready = initialize_model()
  89.  
  90.     if model_ready: # Hanya lanjut jika model berhasil diinisialisasi
  91.         # Validasi input
  92.         if not masalah_input:
  93.             st.warning("Mohon deskripsikan masalah jaringan terlebih dahulu.")
  94.         else:
  95.             # Buat prompt jika input valid
  96.             prompt_final_troubleshoot = buat_prompt_troubleshooting(masalah_input)
  97.  
  98.             with st.spinner(f"🛠️ AI sedang menyusun langkah troubleshooting..."):
  99.                 try:
  100.                     # Kirim ke Gemini (model sudah pasti ada jika model_ready True)
  101.                     response = model.generate_content(prompt_final_troubleshoot)
  102.  
  103.                     # Cek safety
  104.                     if response.parts:
  105.                         jawaban_ai_troubleshoot = response.text
  106.                     else:
  107.                         # ... (penanganan safety tetap sama) ...
  108.                         jawaban_ai_troubleshoot = "**Permintaan diblokir karena alasan keamanan.**"
  109.                         st.warning("Respons AI mungkin diblokir...")
  110.  
  111.                     # Tampilkan hasil
  112.                     st.divider()
  113.                     st.subheader(f"📋 Langkah Troubleshooting untuk '{masalah_input}':")
  114.                     st.markdown(jawaban_ai_troubleshoot)
  115.  
  116.                 except Exception as e:
  117.                     # Tangani error
  118.                     st.error(f"Terjadi kesalahan saat menghubungi AI: {e}")
  119.                     st.info("Tips: Coba lagi beberapa saat...")
  120.     else:
  121.         # Pesan jika model gagal inisialisasi (sudah ditampilkan di dalam fungsi initialize_model)
  122.         pass # Tidak perlu pesan tambahan
  123.  
  124. # --- Footer ---
  125. st.divider()
  126. st.markdown("Aplikasi TJKT Troubleshooting Jaringan | Dibuat dengan Streamlit & Google Gemini")
Advertisement
Add Comment
Please, Sign In to add comment