Spaces:
Sleeping
Sleeping
File size: 6,374 Bytes
ea36423 614c1d4 8a4e769 ea36423 614c1d4 ea36423 8a4e769 83c6221 3fcc7dc ea36423 614c1d4 cf5d3de 614c1d4 ea36423 cf5d3de 614c1d4 29a5603 614c1d4 ea36423 614c1d4 ea36423 83c6221 614c1d4 83c6221 |
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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
import os
import logging
import streamlit as st
#import google.generativeai
from google.cloud import aiplatform
from streamlit_chat import message
import whisper
from gtts import gTTS
import tempfile
from pydub import AudioSegment
from groq import Groq, GroqError
# Securely configure API keys
GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
GROQ_API_KEY = os.getenv("GROQ_API_KEY")
# Configure Google Generative AI API
#genai.configure(api_key=GOOGLE_API_KEY)
# Initialize the AI Platform client
aiplatform.init(project="Generative Language Client", location="your-region")
# Set up logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Initialize Groq Client
if not GROQ_API_KEY:
raise ValueError("GROQ_API_KEY is not set.")
try:
groq_client = Groq(api_key=GROQ_API_KEY)
logger.info("Groq API key is set and client is initialized.")
except GroqError as e:
logger.error(f"Failed to initialize Groq client: {e}")
raise
# Load Whisper model for audio transcription
try:
whisper_model = whisper.load_model("base")
logger.info("Whisper model loaded successfully.")
except Exception as e:
logger.error(f"Failed to load Whisper model: {e}")
raise
# Initialize Google Generative Model for chatbot
model = genai.GenerativeModel(
'gemini-1.5-flash',
system_instruction=(
"Persona: You are Dr. Assad Siddiqui, a heart specialist. Only provide information related to heart health, symptoms, and advice. "
"Ask users about their heart-related symptoms and provide consultation and guidance based on their input. "
"Always provide brief answers. If the inquiry is not related to heart health, politely say that you can only provide heart-related information. "
"Responses should be in Urdu written in English and in English."
)
)
# Function to get chatbot response
def get_chatbot_response(user_input):
response = model.generate_content(user_input)
return response.text.strip()
# Function to process audio using Whisper and Groq API
def process_audio(audio_file):
try:
result = whisper_model.transcribe(audio_file)
user_text = result['text']
logger.info(f"Transcription successful: {user_text}")
except Exception as e:
logger.error(f"Error in transcribing audio: {e}")
return "Error in transcribing audio.", None
try:
chat_completion = groq_client.chat.completions.create(
messages=[{"role": "user", "content": user_text}],
model="llama3-8b-8192",
)
response_text = chat_completion.choices[0].message.content
logger.info(f"Received response from Groq API: {response_text}")
except GroqError as e:
logger.error(f"Error in generating response with Groq API: {e}")
return "Error in generating response with Groq API.", None
try:
tts = gTTS(text=response_text, lang='en')
audio_file = tempfile.NamedTemporaryFile(delete=False, suffix='.mp3')
tts.save(audio_file.name)
logger.info("Text-to-speech conversion successful.")
except Exception as e:
logger.error(f"Error in text-to-speech conversion: {e}")
return "Error in text-to-speech conversion.", None
return response_text, audio_file.name
# Streamlit page configuration
st.set_page_config(page_title="Heart Health Chatbot", page_icon="👨⚕️", layout="centered")
# Background and header
st.markdown("""
<style>
.stApp { background-image: url('https://cdn.wallpapersafari.com/29/34/8Ak1Sf.png'); background-size: cover; }
.chat-bubble { background-color: #128c7E; color: white; padding: 10px; border-radius: 10px; max-width: 70%; }
.user-bubble { background-color: #075e54; color: white; padding: 10px; border-radius: 10px; max-width: 70%; }
img.avatar { width: 50px; height: 50px; border-radius: 50%; }
</style>
<div style="padding:10px;text-align:center;color:white;">
<h1>Heart Health Chatbot 🫀</h1>
<p>Ask me anything about heart diseases!</p>
</div>
""", unsafe_allow_html=True)
# Initialize session state for chat history
if "history" not in st.session_state:
st.session_state.history = []
user_avatar_url = "https://img.freepik.com/free-photo/sad-cartoon-anatomical-heart_23-2149767987.jpg"
bot_avatar_url = "https://img.freepik.com/premium-photo/3d-render-man-doctor-avatar-round-sticker-with-cartoon-character-face-user-id-thumbnail.jpg"
# Function to display chat history
def display_chat_history():
for chat in st.session_state.history:
if chat["role"] == "user":
st.markdown(f"""
<div style="display: flex; justify-content: flex-end; margin-bottom: 10px;">
<div class="user-bubble"><p><b>You:</b> {chat['content']}</p></div>
<img src="{user_avatar_url}" class="avatar"/>
</div>
""", unsafe_allow_html=True)
else:
st.markdown(f"""
<div style="display: flex; margin-bottom: 10px;">
<img src="{bot_avatar_url}" class="avatar"/>
<div class="chat-bubble"><p><b>Bot:</b> {chat['content']}</p></div>
</div>
""", unsafe_allow_html=True)
# Main application layout
def main():
display_chat_history()
with st.container():
with st.form(key="user_input_form", clear_on_submit=True):
user_input = st.text_input("Type your message...", placeholder="Ask about heart health...", max_chars=500)
submit_button = st.form_submit_button("Send")
if submit_button and user_input.strip():
with st.spinner("Thinking..."):
bot_response = get_chatbot_response(user_input)
# Update chat history
st.session_state.history.append({"role": "user", "content": user_input})
st.session_state.history.append({"role": "bot", "content": bot_response})
display_chat_history()
# Footer
st.markdown("""
<p style="text-align:center; color:white; margin-top:50px;">
Check out the <a href="https://live-appointment-chatbot20.zapier.app/" target="_blank" style="color:#34c759;">Live Appointment</a>.
</p>
""", unsafe_allow_html=True)
# Run the app
if __name__ == "__main__":
main()
|