chatbot / app.py
zainab1234awan's picture
Update app.py
255c202 verified
Raw
History Blame Contribute Delete
4.14 kB
import os
import streamlit as st
from groq import Groq
# =====================================================
# Page Config
# =====================================================
st.set_page_config(
page_title="Zainab's AI Assistant",
page_icon="🚀",
layout="wide",
)
# =====================================================
# Setup Groq Client
# =====================================================
API_KEY = os.environ.get("GROQ_API_KEY")
client = Groq(api_key=API_KEY) if API_KEY else None
AVAILABLE_MODELS = {
"Llama 3.3 70B": "llama-3.3-70b-versatile",
"Llama 3.1 70B": "llama-3.1-70b-versatile",
"Llama 3.1 8B": "llama-3.1-8b-instant",
"Mixtral 8x7B": "mixtral-8x7b-32768",
"Gemma 2 9B": "gemma2-9b-it",
}
# =====================================================
# Sidebar
# =====================================================
with st.sidebar:
st.title("⚙️ Settings")
model = st.selectbox(
"Model",
list(AVAILABLE_MODELS.keys()),
index=0,
)
temperature = st.slider("Temperature", 0.0, 1.0, 0.7)
max_tokens = st.slider("Max Tokens", 256, 4096, 1024)
system_prompt = st.text_area(
"System Prompt",
"You are a helpful, professional AI assistant.",
height=90,
)
st.divider()
if client:
st.success("🟢 API Connected")
else:
st.error("🔴 GROQ_API_KEY not found")
if st.button("🗑️ Clear Chat"):
st.session_state.messages = []
# =====================================================
# Session State
# =====================================================
if "messages" not in st.session_state:
st.session_state.messages = []
# =====================================================
# Header
# =====================================================
st.markdown(
"""
<h1 style="text-align:center;"> Zainab's AI Assistant </h1>
<p style="text-align:center;">Ask Anything</p>
""",
unsafe_allow_html=True,
)
# =====================================================
# Chat History
# =====================================================
for msg in st.session_state.messages:
with st.chat_message(msg["role"]):
st.markdown(msg["content"])
# =====================================================
# Input
# =====================================================
prompt = st.chat_input("Type your message...")
# =====================================================
# Chat Logic
# =====================================================
if prompt:
if not client:
st.error("Add GROQ_API_KEY in Hugging Face Secrets")
else:
clean_prompt = prompt.strip()
st.session_state.messages.append({
"role": "user",
"content": clean_prompt,
})
with st.chat_message("user"):
st.markdown(clean_prompt)
# Build Groq payload safely
payload = [{
"role": "system",
"content": system_prompt.strip()
}]
for m in st.session_state.messages:
if (
isinstance(m, dict)
and isinstance(m.get("role"), str)
and isinstance(m.get("content"), str)
):
payload.append({
"role": m["role"],
"content": m["content"],
})
model_id = AVAILABLE_MODELS[model]
# ---- Streaming response ----
with st.chat_message("assistant"):
placeholder = st.empty()
full = ""
stream = client.chat.completions.create(
model=model_id,
messages=payload,
temperature=temperature,
max_tokens=max_tokens,
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta
if delta and delta.content:
full += delta.content
placeholder.markdown(full)
st.session_state.messages.append({
"role": "assistant",
"content": full,
})