# app.py import streamlit as st from models import demo_qwen, demo_r1, demo_zero st.set_page_config(page_title="DeepSeek Chatbot", layout="centered") # A helper function to pick the correct Gradio interface def select_demo(model_name): if model_name == "DeepSeek-R1-Distill-Qwen-32B": return demo_qwen elif model_name == "DeepSeek-R1": return demo_r1 elif model_name == "DeepSeek-R1-Zero": return demo_zero else: return demo_qwen # default fallback # Title of the Streamlit app st.title("DeepSeek Chatbot") # Sidebar or main area for parameter selection st.subheader("Model and Parameters") model_name = st.selectbox( "Select Model", ["DeepSeek-R1-Distill-Qwen-32B", "DeepSeek-R1", "DeepSeek-R1-Zero"] ) # Optional parameter: System message system_message = st.text_area( "System Message", value="You are a friendly Chatbot created by ruslanmv.com", height=80 ) # Optional parameter: max new tokens max_new_tokens = st.slider( "Max new tokens", min_value=1, max_value=4000, value=512, step=1 ) # Optional parameter: temperature temperature = st.slider( "Temperature", min_value=0.10, max_value=4.00, value=0.80, step=0.05 ) # Optional parameter: top-p top_p = st.slider( "Top-p (nucleus sampling)", min_value=0.10, max_value=1.00, value=0.90, step=0.05 ) # A text area for user input st.subheader("Chat") user_prompt = st.text_area("Your message:", value="", height=100) if "chat_history" not in st.session_state: st.session_state["chat_history"] = [] # Button to send user prompt if st.button("Send"): if user_prompt.strip(): # Retrieve the correct Gradio demo demo = select_demo(model_name) # Here we assume the Gradio interface has a function signature for `.predict()` # that accepts text plus generation parameters in some order. # Many huggingface-style Gradio demos simply take a single text prompt, # but it depends entirely on how `demo` is defined in your Gradio code. # # If the interface has multiple inputs in a specific order, you might do something like: # response = demo.predict(system_message, user_prompt, max_new_tokens, temperature, top_p) # # Or if it only expects a single string, you might combine them: # combined_prompt = f"System: {system_message}\nUser: {user_prompt}" # response = demo.predict(combined_prompt, max_new_tokens, temperature, top_p) # # The exact call depends on your Gradio block's input signature. # For illustrative purposes, let's assume a simple signature: # demo.predict(prompt: str, max_new_tokens: int, temperature: float, top_p: float) # and we inject the system message on top: combined_prompt = f"{system_message}\n\nUser: {user_prompt}" try: response = demo.predict( combined_prompt, max_new_tokens, temperature, top_p ) except Exception as e: response = f"Error: {e}" st.session_state["chat_history"].append(("User", user_prompt)) st.session_state["chat_history"].append(("Assistant", response)) st.experimental_rerun() # Display conversation if st.session_state["chat_history"]: for role, text in st.session_state["chat_history"]: if role == "User": st.markdown(f"**{role}:** {text}") else: st.markdown(f"**{role}:** {text}")