Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
import streamlit as st import os import google.generativeai as genai # --- Konfigurasi Halaman Streamlit --- st.set_page_config(page_title="Asisten Diagnostik TKR", page_icon="🛠️", layout="wide") st.title("🛠️ Asisten Diagnostik Awal Kendaraan") st.caption("Didukung oleh KA Generatif (Gemini)") # --- Konfigurasi API Key & Model Gemini --- api_key_checked_success = False model = None def initialize_model_with_retry(max_retries=3, delay=2): global model, api_key_checked_success # Hanya jalankan jika belum pernah berhasil if api_key_checked_success: return True for attempt in range(max_retries): try: st.info(f"Mencoba konfigurasi API Key... (Percobaan {attempt + 1}/{max_retries})") api_key = os.environ['GOOGLE_API_KEY'] genai.configure(api_key=api_key) model_instance = genai.GenerativeModel('models/gemini-pro-latest') # Tes koneksi sederhana (opsional tapi bagus) # model_instance.generate_content("test", generation_config=genai.types.GenerationConfig(max_output_tokens=1)) # Jika semua berhasil sampai sini: model = model_instance # Assign ke variabel global HANYA jika berhasil api_key_checked_success = True # Tandai berhasil st.success("API Key & Model AI berhasil dikonfigurasi.") # Hapus pesan percobaan dari layar st.empty() return True # Berhasil except KeyError: st.warning(f"Percobaan {attempt + 1}: GOOGLE_API_KEY belum siap. Mencoba lagi dalam {delay} detik...") if attempt < max_retries - 1: # Jangan sleep di percobaan terakhir time.sleep(delay) else: st.error("Error: GOOGLE_API_KEY tidak ditemukan di Replit Secrets setelah beberapa percobaan.") st.info("Pastikan GOOGLE_API_KEY sudah ditambahkan ke Secrets dan coba refresh halaman.") return False # Gagal setelah semua percobaan except Exception as e: st.error(f"Error saat mengkonfigurasi atau memuat model AI (Percobaan {attempt + 1}): {e}") if attempt < max_retries - 1: time.sleep(delay) else: st.error("Gagal mengkonfigurasi model setelah beberapa percobaan.") return False # Gagal setelah semua percobaan # Seharusnya tidak sampai sini, tapi sebagai fallback return False # --- Fungsi untuk Membuat Prompt --- def buat_prompt(gejala): # Prompt yang sama detailnya seperti sebelumnya return f""" Anda adalah seorang mekanik senior TKR (Teknik Kendaraan Ringan) yang sangat berpengalaman dan sabar dalam menjelaskan kepada siswa SMK. Seorang siswa melaporkan gejala kerusakan kendaraan berikut: '{gejala}' Tugas Anda: 1. Analisis gejala tersebut. 2. Berikan daftar kemungkinan penyebab umum kerusakan tersebut (maksimal 5 penyebab). Urutkan dari yang paling mungkin terjadi. 3. Untuk setiap kemungkinan penyebab, berikan 1-2 langkah diagnostik awal yang SANGAT SEDERHANA dan AMAN yang bisa diperiksa oleh siswa TKR dengan pengawasan guru (misalnya cek visual, cek level cairan, mendengarkan suara). Hindari langkah yang memerlukan alat khusus atau pembongkaran kompleks di tahap awal ini. 4. Gunakan bahasa yang teknis namun mudah dipahami oleh siswa SMK TKR. Berikan penjelasan singkat mengapa gejala itu bisa terkait dengan penyebab tersebut. Format Jawaban (Gunakan Markdown): **Kemungkinan Penyebab:** 1. **[Nama Penyebab 1]:** [Penjelasan singkat kaitan gejala dengan penyebab]. * _Langkah Diagnostik Awal:_ [Langkah 1] * _Langkah Diagnostik Awal:_ [Langkah 2 (jika ada)] 2. **[Nama Penyebab 2]:** [Penjelasan singkat kaitan gejala dengan penyebab]. * _Langkah Diagnostik Awal:_ [Langkah 1] * _Langkah Diagnostik Awal:_ [Langkah 2 (jika ada)] ... (dan seterusnya, maksimal 5) --- **Penting:** Ingatkan siswa bahwa ini hanyalah **diagnostik awal**. Pemeriksaan dan perbaikan lebih lanjut harus dilakukan oleh mekanik profesional atau di bawah pengawasan ketat guru praktik di bengkel sekolah. """ # --- Interface Pengguna Streamlit --- st.subheader("Deskripsikan Gejala Kerusakan:") gejala_input = st.text_area("Contoh: Mesin mobil tidak mau menyala saat distarter, hanya bunyi 'klik'.", height=100) diagnosa_button = st.button("Mulai Diagnostik Awal", type="primary") # --- Logika Saat Tombol Ditekan --- if diagnosa_button: model_ready = initialize_model_with_retry() if model_ready: if not gejala_input: st.warning("Mohon masukkan deskripsi gejala terlebih dahulu.") else: prompt_final = buat_prompt(gejala_input) with st.spinner("🤖 KA sedang menganalisis gejala... Mohon tunggu sebentar..."): try: response = model.generate_content(prompt_final) jawaban_ai = response.text st.divider() # Garis pemisah st.subheader("🔬 Hasil Analisis KA:") st.markdown(jawaban_ai) # Gunakan markdown untuk format yang lebih baik except Exception as e: st.error(f"Terjadi kesalahan saat menghubungi KA: {e}") st.info("Tips: Coba lagi beberapa saat. Pastikan API Key valid dan tidak melebihi batas penggunaan.") # --- Footer --- st.divider() st.markdown("Aplikasi TKR Diagnostik Kendaraan | Dibuat dengan Streamlit & Google Gemini")
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)