Spaces:
Sleeping
Sleeping
File size: 3,680 Bytes
f7c8a78 0f1be6d f7c8a78 d1eb12b f7c8a78 27c84a0 f7c8a78 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
import streamlit as st
from transformers import pipeline
import google.generativeai as genai
from pytube import Search
# Load sentiment analysis model using PyTorch backend
mood_classifier = pipeline("sentiment-analysis", framework="pt") # Use PyTorch
# Functions
def detect_mood(text):
result = mood_classifier(text)[0]
if result['label'] == 'POSITIVE':
return "joyful"
elif result['label'] == 'NEGATIVE':
return "sad"
else:
return "neutral"
def get_song_recommendations(mood, api_key):
try:
genai.configure(api_key=api_key)
model = genai.GenerativeModel('gemini-pro')
# System prompt to guide the AI
system_prompt = """
You are a music recommendation assistant specialized in Indian songs. Your task is to suggest popular Indian songs based on the user's mood.
- If the mood is "happy," suggest upbeat and joyful Bollywood or Indian pop songs.
- If the mood is "sad," suggest emotional and soulful Indian songs.
- If the mood is "energetic," suggest high-energy dance or workout songs.
- If the mood is "romantic," suggest romantic Bollywood or Indian love songs.
- If the mood is "calm," suggest soothing Indian classical or instrumental music.
Always suggest 3 songs and provide the song title and artist name in the format:
1. Song Title - Artist Name
2. Song Title - Artist Name
3. Song Title - Artist Name
"""
# User prompt
user_prompt = f"Suggest 3 popular Indian {mood} songs."
# Combine system and user prompts
response = model.generate_content([system_prompt, user_prompt])
return response.text
except Exception as e:
st.error(f"Error using Gemini API: {e}")
return None
def search_youtube(query):
search = Search(query)
return search.results[0].watch_url
# Streamlit App
st.title("π΅ Mood-Based Indian Song Player")
# Sidebar for user input
st.sidebar.header("How are you feeling today?")
mood_options = ["happy", "sad", "energetic", "romantic", "calm"]
# Input for Gemini API key
gemini_api_key = st.sidebar.text_input("Enter your Gemini API Key:", type="password")
# Add a button for mood input
user_mood = st.sidebar.selectbox("Select your mood:", mood_options)
# Playlist
if 'playlist' not in st.session_state:
st.session_state.playlist = []
# Main content
if user_mood and gemini_api_key:
mood = detect_mood(user_mood)
st.write(f"π Detected Mood: **{mood}**")
st.write("π΅ Recommended Songs:")
recommendations = get_song_recommendations(mood, gemini_api_key)
if recommendations:
st.write(recommendations)
song_names = recommendations.split("\n")
for song in song_names:
if song.strip():
st.write(f"π Searching for: **{song}**")
video_url = search_youtube(song)
st.video(video_url)
# Add to playlist button
if st.button(f"Add '{song}' to Playlist"):
st.session_state.playlist.append((song, video_url))
st.success(f"Added '{song}' to your playlist!")
else:
st.error("Failed to get song recommendations. Please check your API key.")
elif not gemini_api_key:
st.warning("Please enter your Gemini API key to get started.")
# Display the playlist
st.sidebar.header("Your Playlist")
for idx, (song, url) in enumerate(st.session_state.playlist):
st.sidebar.write(f"{idx + 1}. {song}")
if st.sidebar.button(f"Play {song}", key=f"play_{idx}"):
st.video(url) |