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("---")