Spaces:
Running
Running
File size: 6,040 Bytes
8203f46 f459124 8203f46 e7619fd db5ec60 8203f46 db5ec60 8203f46 e7619fd 8203f46 e7619fd db5ec60 e7619fd db5ec60 8203f46 e7619fd db5ec60 e7619fd 8203f46 e7619fd db5ec60 e7619fd 8203f46 db5ec60 8203f46 db5ec60 8203f46 b4ebef8 8a0d0e1 8203f46 2357427 8203f46 2357427 8203f46 b5ab906 8203f46 |
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 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
import streamlit as st
import os
from langchain_huggingface import HuggingFaceEndpoint, ChatHuggingFace
from langchain_core.messages import HumanMessage, SystemMessage
# Set Hugging Face tokens
hf = os.getenv('HF_TOKEN')
os.environ['HUGGINGFACEHUB_API_TOKEN'] = hf
os.environ['HF_TOKEN'] = hf
# --- Page Configuration ---
st.set_page_config(page_title="Machine Learning Mentor", layout="wide")
# --- Custom CSS ---
# st.markdown("""
# <style>
# body {
# font-family: 'Segoe UI', sans-serif;
# background: linear-gradient(135deg, #2c003e, #0f9b8e);
# }
# .main {
# padding: 2rem;
# }
# .stTextInput>div>div>input {
# color: #ffffff !important;
# background-color: #00000010;
# border: 1px solid #ffffff30;
# }
# .chat-bubble {
# padding: 1rem;
# margin: 0.5rem 0;
# border-radius: 12px;
# max-width: 80%;
# }
# .user-bubble {
# background-color: #4b0082;
# color: white;
# margin-left: auto;
# text-align: right;
# }
# .mentor-bubble {
# background-color: #00bfa6;
# color: white;
# margin-right: auto;
# }
# .stButton>button {
# background: #ffffff20;
# border: 1px solid #ffffff50;
# color: white;
# font-weight: bold;
# border-radius: 10px;
# transition: 0.3s ease;
# }
# .stButton>button:hover {
# background: #ffffff40;
# }
# </style>
# """, unsafe_allow_html=True)
# 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("π€ Machine Learning Mentor")
# --- Sidebar Preferences ---
st.sidebar.title("Mentor Preferences")
experience_label = st.sidebar.selectbox("Select your experience level:", ["Beginner", "Intermediate", "Experienced"])
# --- Initialize Model ---
ml_model_skeleton = HuggingFaceEndpoint(
repo_id='Qwen/Qwen3-14B',
provider='nebius',
temperature=0.7,
max_new_tokens=50,
task='conversational'
)
ml_mentor = ChatHuggingFace(
llm=ml_model_skeleton,
repo_id='Qwen/Qwen3-14B',
provider='nebius',
temperature=0.7,
max_new_tokens=50,
task='conversational'
)
PAGE_KEY = "ml_chat_history"
if PAGE_KEY not in st.session_state:
st.session_state[PAGE_KEY] = []
# --- Layout ---
col1, col2 = st.columns([3, 1])
# --- Chat Section ---
with col1:
with st.form(key="chat_form"):
user_input = st.text_input("Ask your question:")
submit = st.form_submit_button("Send")
if submit and user_input:
system_prompt = f"""You are a seasoned Machine Learning mentor with {experience_label} years of hands-on expertise. Your teaching style is friendly, clear, and approachable. Follow these strict guidelines:
1. Only respond to questions directly related to machine learning programming β including its libraries, tools, and frameworks.
2. If asked about anything outside machine learning, reply with: "I specialize only in Machine learning programming. This appears to be a non-machine learning topic."
3. Do not offer help on topics unrelated to machine learning.
4. Keep your explanations beginner-friendly when needed, focusing on clarity and real-world application.
5. Use practical code examples and scenarios to reinforce learning.
6. For complex or advanced topics, assume the learner has foundational knowledge of machine learning concepts."""
messages = [SystemMessage(content=system_prompt), HumanMessage(content=user_input)]
result = ml_mentor.invoke(messages)
st.session_state[PAGE_KEY].append((user_input, result.content))
st.subheader("π¨οΈ Chat History")
# for user, bot in st.session_state[PAGE_KEY]:
# st.markdown(f'<div class="chat-bubble user-bubble">{user}</div>', unsafe_allow_html=True)
# st.markdown(f'<div class="chat-bubble mentor-bubble">{bot}</div>', unsafe_allow_html=True)
if st.session_state[PAGE_KEY]:
st.markdown('<div class="chat-container">', unsafe_allow_html=True)
for user, bot in st.session_state[PAGE_KEY]:
st.markdown(f'<div class="chat-bubble-user">π€ <strong>You:</strong> {user}</div>', unsafe_allow_html=True)
st.markdown(f'<div class="chat-bubble-bot">π§βπ« <strong>Mentor:</strong> {bot}</div>', unsafe_allow_html=True)
st.markdown('</div>', unsafe_allow_html=True)
# --- Mentor Tips Sidebar ---
# with col2:
# st.markdown("### π‘ Tips from Mentor")
# st.info("Try asking about:\n- Regression vs Classification\n- Overfitting examples\n- Feature scaling\n- Model evaluation techniques")
|