chatbot2 / app.py
Reshmarb's picture
modified
78b8ee2
raw
history blame
3.8 kB
from groq import Groq
import gradio as gr
from gtts import gTTS
import uuid
import base64
from io import BytesIO
import os
# Initialize Groq Client
# client = Groq(
# api_key="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",
# )
client = Groq(api_key=os.getenv("GROQ_API_KEY_2"))
# client = Groq(
# api_key="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",
# )
# Function to encode the image
def encode_image(uploaded_image):
buffered = BytesIO()
uploaded_image.save(buffered, format="PNG") # Ensure the correct format
return base64.b64encode(buffered.getvalue()).decode("utf-8")
# Function to handle text and image inputs
def customLLMBot(user_input, uploaded_image):
try:
if uploaded_image is not None:
# Encode the image to base64
base64_image = encode_image(uploaded_image)
# Create a message specifically for image prompts (no system messages allowed)
messages = [
{
"role": "user",
"content": [
{"type": "text", "text": "What's in this image?"},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{base64_image}"}},
],
}
]
# Send the image message to the Groq API
response = client.chat.completions.create(
model="llama-3.2-11b-vision-preview",
messages=messages,
)
else:
# Process text input (system messages allowed here)
messages = [
{"role": "system", "content": "You are Dr. HealthBuddy, a professional virtual doctor chatbot."},
{"role": "user", "content": user_input},
]
response = client.chat.completions.create(
model="llama-3.2-11b-vision-preview",
messages=messages,
)
# Extract the reply
LLM_reply = response.choices[0].message.content
# Generate audio for response
audio_file = f"response_{uuid.uuid4().hex}.mp3"
tts = gTTS(LLM_reply, lang='en')
tts.save(audio_file)
return [(user_input or "Image uploaded", LLM_reply)], audio_file
except Exception as e:
# Handle errors gracefully
error_message = f"An error occurred: {e}"
return [(user_input or "Image uploaded", error_message)], None
# Gradio Interface
def chatbot_ui():
with gr.Blocks() as demo:
gr.Markdown("# Healthcare Chatbot Doctor")
chatbot = gr.Chatbot(label="Responses")
user_input = gr.Textbox(label="Ask a health-related question",
placeholder="Describe your symptoms...",
elem_id="user-input",
lines=1)
uploaded_image = gr.Image(label="Upload an Image", type="pil")
audio_output = gr.Audio(label="Audio Response")
submit_btn = gr.Button("Submit")
clear_btn = gr.Button("Clear")
# Define actions
submit_btn.click(
customLLMBot,
inputs=[user_input, uploaded_image],
outputs=[chatbot, audio_output],
)
user_input.submit(
customLLMBot,
inputs=[user_input, uploaded_image],
outputs=[chatbot, audio_output],
)
clear_btn.click(
lambda: ([], "", None, []),
inputs=[],
outputs=[chatbot, user_input, uploaded_image, audio_output],
)
return demo
# Launch the interface
#chatbot_ui().launch(share=True)
chatbot_ui().launch(server_name="0.0.0.0", server_port=7860)
#chatbot_ui().launch(server_name="localhost", server_port=7860)