streamlit-chatbot-test / src /streamlit_app.py
ferrywuai's picture
Create Chatbot App (#1)
15b7567 verified
raw
history blame
3.1 kB
import os
import streamlit as st
from huggingface_hub import InferenceClient
chat_parameters = {
"system_prompt": "You are a friendly Chatbot.",
"max_tokens": 512,
"temperature": 0.7,
"top_p": 0.95,
}
def get_chat_parameters():
with st.sidebar:
chat_parameters["system_prompt"] = st.text_area(
"System Prompt", value=chat_parameters["system_prompt"])
chat_parameters["max_tokens"] = st.slider(
"Max Tokens", min_value=64, max_value=2048,
value=chat_parameters["max_tokens"], step=64)
chat_parameters["temperature"] = st.slider(
"Temperature", min_value=0.1, max_value=2.0,
value=chat_parameters["temperature"], step=0.1)
chat_parameters["top_p"] = st.slider(
"Top-p", min_value=0.1, max_value=1.0,
value=chat_parameters["top_p"], step=0.05)
def get_reponse(client, user_input):
# Construct message list with system prompt and history
messages = [{"role": "system",
"content": chat_parameters["system_prompt"]}]
messages.extend(st.session_state.chat_history)
messages.append({"role": "user", "content": user_input})
with st.spinner("Generating response..."):
response_text = ""
placeholder = st.empty()
for chunk in client.chat_completion(
messages=messages,
max_tokens=chat_parameters["max_tokens"],
stream=True,
temperature=chat_parameters["temperature"],
top_p=chat_parameters["top_p"],
):
if chunk.choices and chunk.choices[0].delta.content:
token = chunk.choices[0].delta.content
response_text += token
placeholder.markdown(f"**Assistant:** {response_text}")
# Update chat history
st.session_state.chat_history.append(
{"role": "user", "content": user_input})
st.session_state.chat_history.append(
{"role": "assistant", "content": response_text})
def chatbot():
model_id = "openai/gpt-oss-20b"
hf_token = os.getenv("HF_TOKEN")
# Initialize InferenceClient
client = InferenceClient(token=hf_token, model=model_id)
# Initialize chat history
if "chat_history" not in st.session_state:
st.session_state.chat_history = []
# Page title
st.title("πŸ€– Chatbot")
# Sidebar: system prompt and generation parameters
get_chat_parameters()
# User input field
user_input = st.text_input("Type your message...")
# Handle user input
if st.button("βœ… Send"):
if user_input.strip():
get_reponse(client, user_input)
else:
st.warning("Please enter a message.")
# Display chat history
if st.session_state.chat_history:
st.markdown("---")
st.subheader("Chat History")
for msg in st.session_state.chat_history:
role = "πŸ§‘ You" if msg["role"] == "user" else "πŸ€– Assistant"
st.markdown(f"**{role}:** {msg['content']}")
if __name__ == "__main__":
chatbot()