File size: 3,733 Bytes
07578c1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2b22a92
07578c1
 
 
 
 
 
 
 
2b22a92
07578c1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84fa53d
07578c1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import os
from langchain_huggingface import HuggingFaceEndpoint, ChatHuggingFace
from langchain_core.messages import HumanMessage, SystemMessage

# Load Hugging Face token from environment
hf = os.getenv('HF_TOKEN')
os.environ['HUGGINGFACEHUB_API_TOKEN'] = hf
os.environ['HF_TOKEN'] = hf

# --- Page Config ---
st.set_page_config(page_title="GenAI Mentor", layout="wide")

# --- Custom CSS Styling ---
st.markdown("""
    <style>
    body {
        background-color: #1e1e2f;
        font-family: 'Segoe UI', sans-serif;
    }
    .main {
        background: linear-gradient(to right, #3e32a8, #80ffe0);
        padding: 2rem;
        border-radius: 12px;
    }
    h1, h2, h3, p, label {
        color: white !important;
        text-align: center;
    }
    .stTextInput>div>div>input {
        border: 1px solid #ddd;
        border-radius: 10px;
        padding: 0.5rem;
        font-size: 16px;
        width: 100%;
    }
    .stButton>button {
        background-color: #6a00ff;
        color: white;
        padding: 0.6rem 1.2rem;
        font-size: 16px;
        border: none;
        border-radius: 10px;
        transition: 0.3s ease;
    }
    .stButton>button:hover {
        background-color: #5300e8;
    }
    .chat-box {
        background-color: #ffffff15;
        border-radius: 12px;
        padding: 1rem;
        margin-bottom: 1rem;
        color: white;
        line-height: 1.6;
    }
    .user-msg {
        color: #e0e0e0;
        font-weight: 600;
    }
    .bot-msg {
        color: #ffffff;
        margin-top: 0.3rem;
    }
    hr {
        border: 0;
        height: 1px;
        background: #ffffff30;
        margin: 1.5rem 0;
    }
    </style>
""", unsafe_allow_html=True)

# --- Title ---
st.title("🤖 GenAI Mentor Chat")
st.markdown("<p style='font-size:18px;'>Empowering your AI journey—one question at a time.</p>", unsafe_allow_html=True)

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

# --- Model Initialization ---
genai_skeleton = HuggingFaceEndpoint(
    repo_id='google/gemma-2-9b-it',
    provider='nebius',
    temperature=0.7,
    max_new_tokens=150,
    task='conversational'
)

genai_chat = ChatHuggingFace(
    llm=genai_skeleton,
    repo_id='google/gemma-2-9b-it',
    provider='nebius',
    temperature=0.7,
    max_new_tokens=150,
    task='conversational'
)

# --- Session Key ---
PAGE_KEY = "genai_chat_history"
if PAGE_KEY not in st.session_state:
    st.session_state[PAGE_KEY] = []

# --- Chat Form ---
with st.form(key="chat_form"):
    st.markdown("#### 💬 Ask your question:")
    user_input = st.text_input("", placeholder="Type your Generative AI question here...")
    submit = st.form_submit_button("Send")

# --- Handle Submission ---
if submit and user_input:
    system_prompt = (
        f"Act as a Generative AI mentor with {experience_label} expertise. "
        f"Explain concepts in a friendly tone, within 150 words. "
        f"If the question is not related to Generative AI, politely say it's out of scope."
    )
    messages = [SystemMessage(content=system_prompt), HumanMessage(content=user_input)]
    result = genai_chat.invoke(messages)
    st.session_state[PAGE_KEY].append((user_input, result.content))

# --- Display Chat History ---
st.subheader("🗨️ Conversation History")
for user, bot in reversed(st.session_state[PAGE_KEY]):
    st.markdown(f"""
        <div class="chat-box">
            <div class="user-msg">🧑‍💻 <strong>You:</strong> {user}</div>
            <div class="bot-msg">🤖 <strong>Mentor:</strong> {bot}</div>
        </div>
    """, unsafe_allow_html=True)