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!")