File size: 3,767 Bytes
9925762
 
 
 
 
 
79e9b6a
9925762
 
aed9a4d
9925762
 
 
6a3a5a2
9925762
 
 
6a3a5a2
9925762
 
 
 
6a3a5a2
9925762
 
6a3a5a2
 
 
 
9925762
 
6a3a5a2
 
9925762
 
 
6a3a5a2
9925762
 
6a3a5a2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9925762
 
 
 
aed9a4d
9925762
 
 
 
 
aed9a4d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9925762
 
aed9a4d
9925762
 
 
 
469505c
 
 
 
aed9a4d
 
469505c
9925762
 
 
 
 
 
aed9a4d
 
 
 
 
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
121
122
123
124
125
126
import streamlit as st
import os
from langchain_huggingface import HuggingFaceEndpoint, ChatHuggingFace
from langchain_core.messages import HumanMessage, SystemMessage

# Set environment variables
hf = os.getenv('HF_TOKEN')
os.environ['HUGGINGFACEHUB_API_TOKEN'] = hf
os.environ['HF_TOKEN'] = hf

# Page setup
st.set_page_config(page_title="Statistics Mentor Chat", layout="centered")

# Improved custom CSS
st.markdown("""
    <style>
    .main {
        background: linear-gradient(to right, #1f4037, #99f2c8);
        padding: 2rem;
        font-family: 'Segoe UI', sans-serif;
    }
    .stButton>button {
        background-color: #ffffff10;
        color: white;
        font-weight: 600;
        border-radius: 10px;
        padding: 0.6rem 1rem;
        transition: all 0.3s ease;
        border: 1px solid white;
    }
    .stButton>button:hover {
        background-color: #ffffff30;
        color: white;
        border-color: #fff;
    }
    h1, h3, p, label {
        color: white;
        text-align: center;
    }
    .chat-bubble-user {
        background-color: #ffffff25;
        padding: 0.75rem 1rem;
        border-radius: 1rem;
        margin-bottom: 0.5rem;
        color: #fff;
        font-weight: 500;
        text-align: left;
        width: fit-content;
        max-width: 90%;
        align-self: flex-end;
    }
    .chat-bubble-bot {
        background-color: #ffffff15;
        padding: 0.75rem 1rem;
        border-radius: 1rem;
        margin-bottom: 0.5rem;
        color: #fff;
        text-align: left;
        width: fit-content;
        max-width: 90%;
        align-self: flex-start;
    }
    .chat-container {
        display: flex;
        flex-direction: column;
        gap: 0.5rem;
        margin-top: 2rem;
    }
    </style>
""", unsafe_allow_html=True)
# Title
st.title("📊 Statistics Mentor Chat")

# Sidebar
st.sidebar.title("Mentor Preferences")
exp = st.sidebar.selectbox("Select your experience level:", ["Beginner", "Intermediate", "Expert"])

# Model setup
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'
)

# Session key
PAGE_KEY = "chat_history_stats"
if PAGE_KEY not in st.session_state:
    st.session_state[PAGE_KEY] = []

# Chat form
with st.form(key="chat_form"):
    user_input = st.text_input("Ask your question:")
    submit = st.form_submit_button("Send")

# Chat logic
if submit and user_input:
    system_prompt = ( f"""Act as a statistics mentor with {exp} years of experience. Teach in a friendly, approachable manner while following these strict rules:
        1. Only answer questions related to statistics
        2. For any non-statistics query, respond with exactly: "I specialize only in statistics programming. This appears to be a non-statistics topic."
        3. Never suggest you can help with non-statistics topics
        4. Keep explanations clear, practical, and beginner-friendly when appropriate
        5. Include practical examples when explaining concepts
        6. For advanced topics, assume the student has basic statistics knowledge"""    
    )
    messages = [SystemMessage(content=system_prompt), HumanMessage(content=user_input)]
    result = stats_mentor.invoke(messages)
    st.session_state[PAGE_KEY].append((user_input, result.content))

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