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( """

Zainab's AI Assistant

Ask Anything

""", 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, })