import streamlit as st import tempfile import os from agent import TranslationAgent # Page config st.set_page_config( page_title="Multi-Language Translation Agent", page_icon="🌍", layout="wide" ) # Initialize agent @st.cache_resource def get_agent(): return TranslationAgent() def main(): st.title("🌍 Multi-Language Translation Agent") st.markdown("### Translate text between 70+ languages and convert to speech") agent = get_agent() # Create columns for layout col1, col2 = st.columns(2) with col1: st.subheader("📝 Input") # Source language selection source_lang = st.selectbox( "Source Language:", options=list(agent.languages.keys()), format_func=lambda x: f"{agent.languages[x]} ({x})", index=0 # Default to English ) # Text input input_text = st.text_area( "Enter text to translate:", height=150, placeholder="Type your text here..." ) # Auto-detect option auto_detect = st.checkbox("Auto-detect source language", value=True) with col2: st.subheader("🎯 Output") # Target language selection target_lang = st.selectbox( "Target Language:", options=list(agent.languages.keys()), format_func=lambda x: f"{agent.languages[x]} ({x})", index=1 # Default to Spanish ) # Translation output area translation_output = st.empty() # Audio output area audio_output = st.empty() # Process button if st.button("🚀 Translate & Generate Speech", type="primary"): if input_text.strip(): with st.spinner("Processing..."): try: # Perform translation result = agent.translate_and_speak( text=input_text, source_lang=None if auto_detect else source_lang, target_lang=target_lang ) # Display results with translation_output.container(): st.text_area( f"Translation to {agent.languages[target_lang]}:", value=result['translated_text'], height=150, key="translation_result" ) # Show detected language if auto-detect was used if auto_detect and result['detected_language']: st.info(f"Detected language: {agent.languages.get(result['detected_language'], result['detected_language'])}") # Display audio with audio_output.container(): st.audio(result['audio_file'], format='audio/mp3') # Download button with open(result['audio_file'], 'rb') as audio_file: st.download_button( label="📥 Download Audio", data=audio_file.read(), file_name=f"translation_{target_lang}.mp3", mime="audio/mpeg" ) st.success("✅ Translation and speech generation completed!") except Exception as e: st.error(f"❌ Error: {str(e)}") else: st.warning("⚠️ Please enter text to translate") # Language support info with st.expander("🌐 Supported Languages"): st.write("This agent supports translation between any of these languages:") # Create columns for better display lang_cols = st.columns(4) lang_items = list(agent.languages.items()) for i, (code, name) in enumerate(lang_items): with lang_cols[i % 4]: st.write(f"**{name}** ({code})") # Instructions with st.expander("📋 How to Use"): st.markdown(""" 1. **Select Source Language** or enable auto-detect 2. **Enter your text** in the input area 3. **Choose Target Language** for translation 4. **Click Translate & Generate Speech** button 5. **Listen to the audio** and download if needed **Features:** - ✅ 20+ languages supported - ✅ Auto-detect source language - ✅ High-quality translations - ✅ Natural-sounding speech - ✅ Download audio files """) if __name__ == "__main__": main()