import streamlit as st import requests import os # Konfigurasi API Gemini API_URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp:generateContent" API_KEY = os.getenv("API_KEY") # Ganti dengan API Key Anda # Konteks tentang BISINDO BISINDO_CONTEXT = ( "Anda adalah chatbot yang ahli dalam menjelaskan Bahasa Isyarat Indonesia (BISINDO). " "BISINDO adalah bahasa isyarat yang digunakan oleh komunitas Tuli di Indonesia untuk berkomunikasi. " "Anda hanya akan menjawab pertanyaan pengguna yang berkaitan tentang BISINDO. " "Jawab dengan bahasa yang ringkas dan mudah dimengerti." ) def send_message_to_gemini(api_url, api_key, user_message, context): headers = {'Content-Type': 'application/json'} data = {"contents": [{"parts": [{"text": f"{context}\n\nPertanyaan pengguna: {user_message}"}]}]} try: response = requests.post(f"{api_url}?key={api_key}", headers=headers, json=data) response_data = response.json() candidates = response_data.get('candidates', []) if candidates: return candidates[0].get('content', {}).get('parts', [{}])[0].get('text', '') or "Maaf, bot tidak dapat memberikan balasan." return "Maaf, bot tidak dapat memberikan balasan." except requests.exceptions.RequestException as e: return f"Terjadi kesalahan saat menghubungi API: {str(e)}" def chatbot_bisindo(): st.title("Chatbot BISINDO") # Inisialisasi sesi untuk menyimpan riwayat percakapan if "messages" not in st.session_state: st.session_state.messages = [] # Render riwayat percakapan for message in st.session_state.messages: with st.chat_message(message["role"]): st.markdown(message["content"]) # Input pengguna if user_input := st.chat_input("Tanyakan sesuatu tentang BISINDO..."): # Tambahkan input pengguna ke riwayat st.session_state.messages.append({"role": "user", "content": user_input}) with st.chat_message("user"): st.markdown(user_input) # Proses respons dari Gemini with st.chat_message("assistant"): bot_message_placeholder = st.empty() bot_message_placeholder.markdown("Sedang menjawab...") bot_reply = send_message_to_gemini(API_URL, API_KEY, user_input, BISINDO_CONTEXT) bot_message_placeholder.markdown(bot_reply) # Tambahkan respons bot ke riwayat st.session_state.messages.append({"role": "assistant", "content": bot_reply})