SmallBot / app.py
hertogateis's picture
Update app.py
dfb859e verified
import streamlit as st
import requests
# Set up Streamlit page configuration
st.set_page_config(page_title="DeepSeek Chatbot", page_icon="🤖", layout="wide")
# API setup
API_KEY = st.secrets["API_KEY"]
url = "https://api.hyperbolic.xyz/v1/chat/completions"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
# Chat history container
if 'messages' not in st.session_state:
st.session_state.messages = []
# Function to send message and get response
def get_response(user_input):
data = {
"messages": [{"role": "user", "content": user_input}],
"model": "deepseek-ai/DeepSeek-V3",
"max_tokens": 512,
"temperature": 0.1,
"top_p": 0.9
}
try:
response = requests.post(url, headers=headers, json=data)
# Check if the response status code is OK
if response.status_code == 200:
return response.json() # Only parse JSON if status is OK
else:
# Log the error if the status code is not 200
st.error(f"Error: {response.status_code} - {response.text}")
return {}
except requests.exceptions.RequestException as e:
st.error(f"Request failed: {e}")
return {}
# Streamlit chat UI
st.title("Contoh ChatBot Kursus AI : silahkan ketik pertanyaan, harap bersabar jika jawaban agak lambat sebab hanya pakai CPU. WA Hertog 085601906959")
# Display the chat history
for message in st.session_state.messages:
if message["role"] == "user":
st.chat_message("user").markdown(message["content"])
else:
st.chat_message("assistant").markdown(message["content"])
# Sticky input box at the bottom with Send button
st.markdown("""
<style>
.chat-container {
display: flex;
flex-direction: column;
height: 80vh;
justify-content: flex-end;
}
.input-container {
display: flex;
justify-content: space-between;
position: sticky;
bottom: 0;
background-color: white;
padding: 10px;
border-top: 1px solid #ccc;
box-shadow: 0px -1px 5px rgba(0, 0, 0, 0.1);
}
.send-button {
margin-left: 10px;
}
</style>
""", unsafe_allow_html=True)
# Input container with a text area and button
with st.container():
input_container = st.empty()
user_input = input_container.text_area("You:", "", height=68, key="input_text") # Updated height to 68
send_button = st.button("Send", key="send_button", help="Click to send the message")
# Handle user input and update the chat
if send_button and user_input:
st.session_state.messages.append({"role": "user", "content": user_input})
response = get_response(user_input)
if response:
# Assuming the response is in the 'choices' field of the API response
bot_response = response.get('choices', [{}])[0].get('message', {}).get('content', 'Sorry, I did not understand that.')
st.session_state.messages.append({"role": "assistant", "content": bot_response})
st.rerun() # Rerun the app to update the chat history