saindras

aplikasi-tjkt-penjelas-istilah-jaringan.py

Oct 21st, 2025 (edited)
1,021
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.00 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="Penjelas Istilah Jaringan TJKT", page_icon="🌐", layout="wide")
  7. st.title("🌐 Penjelas Istilah Jaringan & Telekomunikasi")
  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 Penjelasan Istilah ---
  42. def buat_prompt_istilah(istilah):
  43.     # Prompt spesifik untuk menjelaskan istilah jaringan
  44.     return f"""
  45.    Anda adalah seorang tutor ahli jaringan komputer dan telekomunikasi (TJKT) yang sangat pandai menyederhanakan konsep kompleks untuk siswa SMK. Gunakan bahasa yang mudah dipahami, hindari jargon berlebihan kecuali jika dijelaskan, dan fokus pada pemahaman konseptual.
  46.  
  47.    Seorang siswa SMK TJKT bertanya tentang istilah/konsep berikut: '{istilah}'
  48.  
  49.    Tugas Anda:
  50.    Jelaskan istilah/konsep '{istilah}' tersebut dengan cara berikut:
  51.  
  52.    1.  **Definisi Singkat:** Berikan definisi dasar (1-2 kalimat) tentang apa itu '{istilah}'.
  53.    2.  **Analogi Sederhana:** Buatlah sebuah analogi yang mudah dipahami (misalnya, membandingkan dengan pengiriman surat, lalu lintas jalan raya, nomor telepon) untuk menjelaskan cara kerja atau fungsi utama dari '{istilah}'. Analogi ini **wajib** ada dan harus relevan.
  54.    3.  **Penjelasan Cara Kerja (Jika Relevan):** Jika memungkinkan dan relevan (terutama untuk protokol atau proses), jelaskan secara singkat langkah-langkah utama cara kerjanya (gunakan poin-poin atau urutan sederhana). Jika tidak relevan (misalnya untuk perangkat keras), lewati bagian ini atau jelaskan fungsi utamanya.
  55.    4.  **Pentingnya/Kegunaan:** Jelaskan mengapa '{istilah}' ini penting dalam dunia jaringan atau telekomunikasi (1-2 kalimat).
  56.  
  57.    Format Jawaban (Gunakan Markdown):
  58.  
  59.    ### Penjelasan: {istilah}
  60.  
  61.    **1. Definisi Singkat:**
  62.    [Definisi dasar 1-2 kalimat]
  63.  
  64.    **2. Analogi Sederhana:**
  65.    Bayangkan seperti ini: [Analogi sederhana yang relevan dan mudah dipahami]
  66.  
  67.    **3. Cara Kerja / Fungsi Utama:**
  68.    (Jika Relevan)
  69.    * [Langkah/Fungsi 1]
  70.    * [Langkah/Fungsi 2]
  71.    * [dst.]
  72.    (Jika Tidak Relevan)
  73.    [Jelaskan fungsi utama secara singkat]
  74.  
  75.    **4. Mengapa Ini Penting?**
  76.    [Penjelasan singkat kegunaan/pentingnya 1-2 kalimat]
  77.  
  78.    ---
  79.    **Ingat:** Penjelasan ini adalah penyederhanaan untuk pemahaman awal. Untuk detail teknis yang mendalam, selalu rujuk buku teks, dokumentasi resmi (RFC jika ada), atau tanyakan pada guru Anda.
  80.    """
  81.  
  82. # --- Interface Pengguna Streamlit ---
  83. st.subheader("Masukkan Istilah Jaringan atau Telekomunikasi:")
  84. istilah_input = st.text_input("Contoh: TCP/IP, Router, DNS, Subnetting, OSI Layer, Firewall, Kabel UTP Cat 6")
  85.  
  86. troubleshoot_button = st.button("Mulai Troubleshooting", type="primary")
  87.  
  88. # --- Logika Saat Tombol Ditekan ---
  89. if troubleshoot_button:
  90.     # ---- Panggil Inisialisasi Model DI SINI ----
  91.     model_ready = initialize_model()
  92.  
  93.     if model_ready: # Hanya lanjut jika model berhasil diinisialisasi
  94.         # Validasi input
  95.         if not istilah_input:
  96.             st.warning("Mohon deskripsikan masalah jaringan terlebih dahulu.")
  97.         else:
  98.             # Buat prompt jika input valid
  99.             prompt_final_troubleshoot = buat_prompt_istilah(istilah_input)
  100.  
  101.             with st.spinner(f"🛠️ KA sedang menyusun langkah troubleshooting..."):
  102.                 try:
  103.                     # Kirim ke Gemini (model sudah pasti ada jika model_ready True)
  104.                     response = model.generate_content(prompt_final_troubleshoot)
  105.  
  106.                     # Cek safety
  107.                     if response.parts:
  108.                         jawaban_ai_troubleshoot = response.text
  109.                     else:
  110.                         # ... (penanganan safety tetap sama) ...
  111.                         jawaban_ai_troubleshoot = "**Permintaan diblokir karena alasan keamanan.**"
  112.                         st.warning("Respons AI mungkin diblokir...")
  113.  
  114.                     # Tampilkan hasil
  115.                     st.divider()
  116.                     st.subheader(f"📋 Langkah Troubleshooting untuk '{istilah_input}':")
  117.                     st.markdown(jawaban_ai_troubleshoot)
  118.  
  119.                 except Exception as e:
  120.                     # Tangani error
  121.                     st.error(f"Terjadi kesalahan saat menghubungi KA: {e}")
  122.                     st.info("Tips: Coba lagi beberapa saat...")
  123.     else:
  124.         # Pesan jika model gagal inisialisasi (sudah ditampilkan di dalam fungsi initialize_model)
  125.         pass # Tidak perlu pesan tambahan
  126.  
  127. # --- Footer ---
  128. st.divider()
  129. st.markdown("Aplikasi TJKT Penjelas Istilah | Dibuat dengan Streamlit & Google Gemini")
Advertisement
Add Comment
Please, Sign In to add comment