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