import streamlit as st import speech_recognition as sr from openai import OpenAI # Initialize session state for chat visibility if "chat_started" not in st.session_state: st.session_state.chat_started = False if "chat_history" not in st.session_state: st.session_state.chat_history = [] if "feedback" not in st.session_state: st.session_state.feedback = {} st.set_page_config(page_title="πŸ’¬Chatbot", page_icon="πŸ’¬", layout="wide") # 🎯 Welcome Screen (Only Show if Chat Not Started) if not st.session_state.chat_started: st.title("πŸ€– Welcome to Deepseek AI Chatbot!") st.write("A smart chatbot powered by the ne model Deepseek R1, designed to assist you with text generation.") st.subheader("✨ Features") st.markdown(""" - πŸ“ **Generate content**: Stories, articles, code, poems, dialogues, and more! - πŸŽ™οΈ **Voice Input**: Speak instead of typing your prompt. - 🎭 **Customizable Tone & Format**: Choose between formal, informal, humorous, technical styles. - βš™οΈ **Adjustable Creativity**: Control randomness with temperature settings. - πŸ“œ **Chat History**: Review past conversations and feedback. """) if st.button("πŸš€ Start Chat"): st.session_state.chat_started = True st.rerun() st.stop() st.title("πŸ€– Deepseek AI Chatbot!") # 🎀 Function to capture voice input def get_voice_input(): recognizer = sr.Recognizer() with sr.Microphone() as source: st.info("🎀 Listening... Speak now!") try: audio = recognizer.listen(source, timeout=5) text = recognizer.recognize_google(audio) return text except sr.UnknownValueError: st.error("πŸ˜• Could not understand the audio.") except sr.RequestError: st.error("πŸ”Œ Speech Recognition service unavailable.") return "" # 🎀 Voice Input Button if st.button("🎀 Speak Prompt"): voice_text = get_voice_input() if voice_text: st.session_state["user_prompt"] = voice_text else: st.warning("No voice input detected.") # πŸ“ User Input Text Area user_prompt = st.text_area("Enter your prompt:", st.session_state.get("user_prompt", "")) # βš™οΈ Sidebar Settings st.sidebar.header("βš™οΈ Settings") output_format = st.sidebar.selectbox("Select Output Format", ["Story", "Poem", "Article", "Code", "Dialogue"]) tone = st.sidebar.selectbox("Select Tone/Style", ["Formal", "Informal", "Humorous", "Technical"]) temperature = st.sidebar.slider("Creativity Level (Temperature)", 0.0, 1.0, 0.7) max_tokens = st.sidebar.slider("Response Length (Max Tokens)", 100, 1024, 500) creative_mode = st.sidebar.checkbox("Enable Creative Mode", value=True) # πŸ“œ Chat History in Sidebar st.sidebar.header("πŸ“œ Chat History") if st.sidebar.button("πŸ—‘οΈ Clear Chat History"): st.session_state.chat_history = [] st.session_state.feedback = {} with st.sidebar.expander("πŸ” View Chat History", expanded=False): for i, chat in enumerate(reversed(st.session_state.chat_history)): st.markdown(f"**User:** {chat['user']}") bot_preview = chat['bot'][:200] + ("..." if len(chat['bot']) > 200 else "") st.markdown(f"**Bot:** {bot_preview}") if len(chat['bot']) > 200: if st.toggle(f"πŸ“– Show Full Response ({i+1})", key=f"toggle_{i}"): st.markdown(chat['bot']) feedback_value = st.session_state.feedback.get(chat['user'], "No Feedback Given") st.markdown(f"**Feedback:** {feedback_value}") st.markdown("---") response_container = st.empty() feedback_container = st.empty() # πŸš€ Generate Response if st.button("Generate Response"): if user_prompt.strip(): client = OpenAI( base_url="https://integrate.api.nvidia.com/v1", api_key="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" ) messages = [{"role": "user", "content": f"Generate a {output_format.lower()} in {tone.lower()} style: {user_prompt}"}] try: completion = client.chat.completions.create( model="tiiuae/falcon3-7b-instruct", messages=messages, temperature=temperature, top_p=0.9 if creative_mode else 0.7, max_tokens=max_tokens, stream=True ) response_text = "" progress_text = st.empty() for chunk in completion: if chunk.choices[0].delta.content is not None: response_text += chunk.choices[0].delta.content progress_text.markdown(f"### Generating... ⏳\n{response_text}") progress_text.empty() response_container.markdown(f"### Generated Response\n{response_text}") chat_entry = {"user": user_prompt, "bot": response_text} st.session_state.chat_history.append(chat_entry) feedback = feedback_container.radio( "Was this response helpful?", ["πŸ‘ Yes", "πŸ‘Ž No"], index=None, key=f"feedback_{len(st.session_state.chat_history)}", horizontal=True ) st.session_state.feedback[user_prompt] = feedback except Exception as e: st.error(f"❌ Error: {e}")