import streamlit as st import pandas as pd from db import insert_data_if_empty, get_mongo_client from chatbot import chatbot_response # Import chatbot functionality #### **1. Ensure Data is Inserted Before Display** insert_data_if_empty() #### **2. MongoDB Connection** collection = get_mongo_client() #### **3. Streamlit App UI** st.title("📊 AI Sentiment Analysis Chatbot") # Show first 5 rows from MongoDB #st.subheader("First 5 Rows from Database") #data = list(collection.find({}, {"_id": 0}).limit(5)) #if data: # st.write(pd.DataFrame(data)) #else: # st.warning("⚠️ No data found. Try refreshing the app.") # Button to show full MongoDB data #if st.button("Show Complete Data"): # all_data = list(collection.find({}, {"_id": 0})) # st.write(pd.DataFrame(all_data)) #### **4. AI Chatbot with Sentiment Analysis** st.subheader("🤖 AI Chatbot with Sentiment Analysis") # User input for chatbot user_prompt = st.text_area("Ask AI something or paste text for sentiment analysis:") if st.button("Analyze Sentiment & Get AI Response"): ai_response, sentiment_label, confidence = chatbot_response(user_prompt) if ai_response: st.write("### AI Response:") st.write(ai_response) st.write("### Sentiment Analysis:") st.write(f"**Sentiment:** {sentiment_label} ({confidence:.2f} confidence)") else: st.warning("⚠️ Please enter a question or text for sentiment analysis.") #chatbot.py import os import streamlit as st import google.generativeai as genai from transformers import pipeline, AutoModelForSequenceClassification, AutoTokenizer # 🔑 Fetch API key from Hugging Face Secrets GEMINI_API_KEY = os.getenv("gemini_api") if GEMINI_API_KEY: genai.configure(api_key=GEMINI_API_KEY) else: st.error("⚠️ Google API key is missing! Set it in Hugging Face Secrets.") # Correct Model Path MODEL_NAME = "cardiffnlp/twitter-roberta-base-sentiment" # Load Sentiment Analysis Model (Ensure the correct model is used) try: tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) sentiment_pipeline = pipeline("sentiment-analysis", model=MODEL_NAME, tokenizer=tokenizer) except Exception as e: st.error(f"❌ Error loading sentiment model: {e}") # Function to analyze sentiment def analyze_sentiment(text): try: sentiment_result = sentiment_pipeline(text)[0] label = sentiment_result['label'] # Extract sentiment label (POSITIVE, NEGATIVE, NEUTRAL) score = sentiment_result['score'] # Extract confidence score # Convert labels to readable format sentiment_mapping = { "LABEL_0": "Negative", "LABEL_1": "Neutral", "LABEL_2": "Positive" } return sentiment_mapping.get(label, "Unknown"), score except Exception as e: return f"Error analyzing sentiment: {e}", None # Function to generate AI response & analyze sentiment def chatbot_response(user_prompt): if not user_prompt: return None, None, None try: # AI Response from Gemini model = genai.GenerativeModel("gemini-1.5-pro") ai_response = model.generate_content(user_prompt) # Sentiment Analysis sentiment_label, confidence = analyze_sentiment(user_prompt) return ai_response.text, sentiment_label, confidence except Exception as e: return f"❌ Error: {e}", None, None