File size: 3,826 Bytes
1b3a617
 
 
 
 
 
 
daf7d4b
 
1b3a617
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import os
from langchain_huggingface import HuggingFaceEndpoint, ChatHuggingFace
from langchain_core.messages import HumanMessage, SystemMessage

# Load HuggingFace token from environment variable
hf = os.getenv('Data_science')
if hf is None:
    raise ValueError("Hugging Face token not found. Please set the 'Data_science' environment variable.")
os.environ['HUGGINGFACEHUB_API_TOKEN'] = hf
os.environ['HF_TOKEN'] = hf

# Page config
st.set_page_config(page_title="🐍 Python Mentor Chat", page_icon="πŸ’¬", layout="centered")

# Inject custom CSS
st.markdown("""
    <style>
    .main {
        background: linear-gradient(135deg, #1f1c2c 0%, #928dab 100%);
        padding: 2rem;
        font-family: 'Segoe UI', sans-serif;
    }
    h1, h2, h3, h4, p, label, .css-10trblm, .css-q8sbsg {
        color: #ffffff !important;
        text-align: center;
    }
    .stTextInput>div>div>input {
        background-color: #ffffff10;
        color: #ffffff;
        border: 1px solid #ffffff50;
        border-radius: 8px;
        padding: 0.6em;
    }
    .stTextInput>div>div>input::placeholder {
        color: #ffffff90;
    }
    .stButton>button {
        background: rgba(255, 255, 255, 0.1);
        border: 2px solid rgba(255, 255, 255, 0.3);
        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.2);
    }
    .stButton>button:hover {
        background: rgba(255, 255, 255, 0.3);
        color: white;
        border-color: white;
    }
    .stSidebar > div:first-child {
        background: #2c3e50;
        color: white;
        border-radius: 0 20px 20px 0;
    }
    .stSidebar h1, .stSidebar h2, .stSidebar h3, .stSidebar h4, .stSidebar label, .stSidebar p {
        color: white !important;
    }
    hr {
        border: 1px solid #ffffff50;
        margin: 1.5em 0;
    }
    </style>
""", unsafe_allow_html=True)

# Title
st.title("🐍 Python Mentor Chat")
st.markdown("### πŸ’¬ Your personal Python guide for Data Science and beyond!")

# Sidebar configuration
st.sidebar.title("πŸ§‘β€πŸ« Mentor Preferences")
experience_label = st.sidebar.selectbox(
    "πŸ“ˆ Select your experience level:", ["Beginner", "Intermediate", "Experienced"]
)

# Load the 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=50,
    task='conversational'
)

# Chat session history key
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:", placeholder="e.g. What is a Python decorator?")
    submit = st.form_submit_button("πŸš€ Send")

# Chat logic
if submit and user_input:
    system_prompt = (
        f"Act as a Python mentor for a {experience_label.lower()} learner. "
        f"Answer in a helpful, friendly, and concise manner. Max 150 words. "
        f"If the question is not Python-related, say it's out of scope politely."
    )
    messages = [SystemMessage(content=system_prompt), HumanMessage(content=user_input)]
    result = deep_seek.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("---")