Spaces:
Sleeping
Sleeping
| 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 | |