Spaces:
Sleeping
Sleeping
| 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() | |