import os import streamlit as st from transformers import pipeline import datetime import pyttsx3 import tempfile import speech_recognition as sr st.set_page_config(page_title="Winner Chat", layout="wide", initial_sidebar_state="expanded") # Sidebar: Model selector + Dark mode st.sidebar.title("⚙️ Settings") model_name = st.sidebar.selectbox("Choose model", ["Arni1ntares/Winner", "gpt2", "distilgpt2"]) dark_mode = st.sidebar.toggle("🌙 Dark Mode") enable_tts = st.sidebar.toggle("🔊 Enable Voice Output") enable_mic = st.sidebar.toggle("🎙️ Enable Voice Input") # Voice recognizer recognizer = sr.Recognizer() @st.cache_resource(show_spinner="Loading model...") def load_model(model_name): return pipeline("text-generation", model=model_name) pipe = load_model(model_name) # Init TTS tts = pyttsx3.init() tts.setProperty('rate', 165) # Custom CSS for message bubbles and dark mode def add_css(): css = """ """ if dark_mode: css += """ """ st.markdown(css, unsafe_allow_html=True) add_css() st.title("🤖 Winner Chat – Enhanced UI") # Init chat state if "messages" not in st.session_state: st.session_state.messages = [] # Display chat history for msg in st.session_state.messages: avatar = "🧑" if msg["role"] == "user" else "🤖" bubble_class = "user-msg" if msg["role"] == "user" else "bot-msg" with st.container(): st.markdown(f"""
{avatar}
{msg['content']}
""", unsafe_allow_html=True) # Voice input user_input = "" if enable_mic: st.subheader("🎙️ Voice Input") mic_button = st.button("Start Listening") if mic_button: with sr.Microphone() as source: st.info("Listening...") audio = recognizer.listen(source) try: user_input = recognizer.recognize_google(audio) st.success(f"You said: {user_input}") except Exception as e: st.error(f"Error: {e}") else: user_input = st.chat_input("Type your message...") if user_input: # Save user input st.session_state.messages.append({"role": "user", "content": user_input}) with st.spinner("Thinking..."): full_prompt = "\n".join( [f"{m['role']}: {m['content']}" for m in st.session_state.messages] ) result = pipe(full_prompt, max_new_tokens=200, temperature=0.7)[0]["generated_text"] response = result.replace(full_prompt, "").strip() st.session_state.messages.append({"role": "assistant", "content": response}) if enable_tts: tts.say(response) tts.runAndWait() st.experimental_rerun() # Export conversation st.sidebar.markdown("---") if st.sidebar.button("📥 Export Chat"): now = datetime.datetime.now().strftime("%Y%m%d-%H%M%S") fname = f"chat_{now}.txt" text = "\n".join([f"{m['role']}: {m['content']}" for m in st.session_state.messages]) with tempfile.NamedTemporaryFile(delete=False, mode="w", suffix=".txt") as f: f.write(text) st.sidebar.download_button("Download Chat", text, file_name=fname, mime="text/plain") st.markdown("---") st.caption("🛠 Built with Streamlit, Hugging Face, and 💛 for AI.")