Spaces:
Running
Running
File size: 3,847 Bytes
3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 79ad7f1 3e980d2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
import streamlit as st
import os
from langchain_huggingface import HuggingFaceEndpoint, ChatHuggingFace
from langchain_core.messages import HumanMessage, SystemMessage
# --- Environment Token Setup ---
hf = os.getenv('Data_science')
os.environ['HUGGINGFACEHUB_API_TOKEN'] = hf
os.environ['HF_TOKEN'] = hf
# --- Streamlit Page Config ---
st.set_page_config(page_title="๐ Statistics Mentor Chat", page_icon="๐", layout="centered")
# --- Custom CSS Styling ---
st.markdown("""
<style>
.main {
background: linear-gradient(135deg, #3e32a8 0%, #80ffe0 100%);
padding: 2rem;
font-family: 'Segoe UI', sans-serif;
}
h1, h2, h3, h4, h5, h6, p, label, .css-10trblm, .css-q8sbsg {
color: #ffffff !important;
text-align: center;
}
.stTextInput > div > div > input {
background-color: rgba(255, 255, 255, 0.1);
color: white;
border: 1px solid rgba(255, 255, 255, 0.5);
border-radius: 8px;
padding: 0.6em;
}
.stTextInput > div > div > input::placeholder {
color: rgba(255, 255, 255, 0.6);
}
.stButton>button {
background: rgba(255, 255, 255, 0.15);
border: 2px solid rgba(255, 255, 255, 0.4);
color: white;
font-size: 18px;
font-weight: bold;
padding: 0.8em 1.2em;
border-radius: 12px;
width: 100%;
transition: all 0.3s ease;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
}
.stButton>button:hover {
background: rgba(255, 255, 255, 0.3);
border-color: white;
color: white;
}
.stSidebar > div:first-child {
background: #2c3e50;
padding: 1rem;
border-radius: 0 15px 15px 0;
}
.stSidebar h1, .stSidebar h2, .stSidebar h3, .stSidebar label, .stSidebar p {
color: white !important;
}
hr {
border: 1px solid rgba(255, 255, 255, 0.3);
margin: 2em 0;
}
</style>
""", unsafe_allow_html=True)
# --- Page Title ---
st.title("๐ Statistics Mentor Chat")
st.markdown("### ๐งฎ Ask questions about probability, distributions, testing, and more!")
# --- Sidebar: Experience Selection ---
st.sidebar.title("๐ Mentor Preferences")
exp = st.sidebar.selectbox("๐ Select your experience level:", ["Beginner", "Intermediate", "Expert"])
# --- Load Language Model ---
stats_model_skeleton = HuggingFaceEndpoint(
repo_id='THUDM/GLM-4-32B-0414',
provider='novita',
temperature=0.7,
max_new_tokens=110,
task='conversational'
)
stats_mentor = ChatHuggingFace(
llm=stats_model_skeleton,
repo_id='THUDM/GLM-4-32B-0414',
provider='novita',
temperature=0.7,
max_new_tokens=110,
task='conversational'
)
# --- Chat Session State ---
PAGE_KEY = "chat_history_stats"
if PAGE_KEY not in st.session_state:
st.session_state[PAGE_KEY] = []
# --- Chat Input ---
with st.form(key="chat_form"):
user_input = st.text_input("๐ Ask your Statistics question:", placeholder="e.g. What is the difference between mean and median?")
submit = st.form_submit_button("๐ค Send")
# --- Chat Handling Logic ---
if submit and user_input:
system_prompt = (
f"You are a statistics mentor with {exp.lower()} expertise. "
f"Answer only statistics-related questions in a concise, friendly tone. "
f"Keep responses under 150 words. If the topic is out of scope, politely say so."
)
messages = [SystemMessage(content=system_prompt), HumanMessage(content=user_input)]
result = stats_mentor.invoke(messages)
st.session_state[PAGE_KEY].append((user_input, result.content))
# --- Chat History ---
st.subheader("๐ Chat History")
for user, bot in st.session_state[PAGE_KEY]:
st.markdown(f"**๐ You:** {user}")
st.markdown(f"**๐ Mentor:** {bot}")
st.markdown("---") |