Spaces:
Running
Running
File size: 5,534 Bytes
458c30b 7fd9b0e 458c30b d5ad75e 458c30b d5ad75e 458c30b d5ad75e 458c30b d5ad75e 458c30b d5ad75e 458c30b d5ad75e 458c30b d5ad75e 458c30b d5ad75e 458c30b d5ad75e b6961df d5ad75e 458c30b b90b5f8 458c30b b90b5f8 ae1087c b90b5f8 458c30b 522574f |
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 |
import streamlit as st
import os
from langchain_huggingface import HuggingFaceEndpoint, ChatHuggingFace
from langchain_core.messages import HumanMessage, SystemMessage
hf = os.getenv('HF_TOKEN')
os.environ['HUGGINGFACEHUB_API_TOKEN'] = hf
os.environ['HF_TOKEN'] = hf
# Page config
st.set_page_config(page_title="Python Mentor Chat", layout="centered")
# Inject home page CSS style
# st.markdown("""
# <style>
# .main {
# background: linear-gradient(135deg, #430089 0%, #82ffa1 100%);
# padding: 2rem;
# font-family: 'Segoe UI', sans-serif;
# }
# .stButton>button {
# background: #ffffff10;
# border: 2px solid #ffffff50;
# color: white;
# font-size: 18px;
# font-weight: 600;
# padding: 0.8em 1.2em;
# border-radius: 12px;
# width: 100%;
# transition: 0.3s ease;
# box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15);
# }
# .stButton>button:hover {
# background: #ffffff30;
# border-color: #fff;
# color: #ffffff;
# }
# h1, h3, p, label {
# color: #ffffff;
# text-align: center;
# }
# hr {
# border: 1px solid #ffffff50;
# margin: 2em 0;
# }
# .css-1aumxhk {
# color: white;
# }
# </style>
# """, unsafe_allow_html=True)
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)
# Page title
# Title
st.title("π Python Mentor Chat")
# Sidebar
st.sidebar.title("Mentor Preferences")
experience_label = st.sidebar.selectbox(
"Select your experience level:", ["Beginner", "Intermediate", "Experienced"]
)
# Initialize model
deep_seek_skeleton = HuggingFaceEndpoint(
repo_id='mistralai/Mistral-7B-Instruct-v0.3',
provider='novita',
temperature=0.7,
max_new_tokens=50,
task='conversational'
)
deep_seek = ChatHuggingFace(
llm=deep_seek_skeleton,
repo_id='mistralai/Mistral-7B-Instruct-v0.3',
provider='novita',
temperature=0.7,
max_new_tokens=150,
task='conversational'
)
PAGE_KEY = "python_chat_history"
if PAGE_KEY not in st.session_state:
st.session_state[PAGE_KEY] = []
# Chat input 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 python mentor with {experience_label.lower()} experience. "
# f"Teach in a friendly manner and keep answers within 150 words. "
# f"If a question is not about python, politely mention it's out of scope."
# )
system_prompt = f"""Act as a Python mentor with {experience_label} years of experience. Teach in a friendly, approachable manner while following these strict rules:
1. Only answer questions related to Python programming (including libraries, frameworks, and tools in the Python ecosystem)
2. For any non-Python query, respond with exactly: "I specialize only in Python programming. This appears to be a non-Python topic."
3. Never suggest you can help with non-Python 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 Python knowledge"""
messages = [SystemMessage(content=system_prompt), HumanMessage(content=user_input)]
result = deep_seek.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("---")
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)
|