import streamlit as st
import requests
import io
import base64
# ✅ Set Streamlit Page Config
st.set_page_config(page_title="Sai Vahini AI Assistant", layout="centered")
# ✅ Render API URL (Ensure this matches your deployed API on Render)
RENDER_API_URL = "https://saivahini.onrender.com/process_audio"
# ✅ UI Header
st.markdown("
Sai Vahini AI Voice Assistant 🕉️
", unsafe_allow_html=True)
# ✅ HTML5 Audio Recorder (JavaScript + Streamlit)
audio_recorder_html = """
"""
# ✅ Display HTML5 Recorder
st.components.v1.html(audio_recorder_html, height=150)
# ✅ Process Button
if st.button("✅ Process Recorded Audio"):
with st.spinner("🔄 Sending audio to AI model..."):
audio_url = st.session_state.get("audio_url", None)
if audio_url:
# Convert Base64 audio to WAV format
audio_data = base64.b64decode(audio_url)
audio_bytes = io.BytesIO(audio_data)
# ✅ Send recorded audio to Render API
response = requests.post(RENDER_API_URL, files={"file": ("audio.wav", audio_bytes, "audio/wav")})
# ✅ Handle API response
if response.status_code == 200:
result = response.json()
st.success("✅ AI Response:")
st.write("📝 **Transcription:**", result.get("transcription", "No transcription"))
st.write("🤖 **Answer:**", result.get("response", "No response found."))
# ✅ Fetch and play AI-generated voice response
audio_response_url = result.get("audio")
if audio_response_url:
st.write("🔊 **AI-generated voice response:**")
audio_response = requests.get(audio_response_url)
if audio_response.status_code == 200:
st.audio(audio_response.content, format="audio/wav")
else:
st.error(f"❌ Failed to load AI audio ({audio_response.status_code})")
else:
st.warning("⚠️ No audio response received from API.")
else:
st.error(f"❌ API Error: {response.status_code} - {response.text}")
else:
st.error("⚠️ No audio recorded. Please record first!")