import streamlit as st import os from main import get_english_tutor_agent, sesi_metne_cevir, metni_sese_cevir st.set_page_config(page_title="AI English Tutor", page_icon="🇬🇧", layout="centered") @st.cache_resource def ajan_yukle(): return get_english_tutor_agent() ajan, sistem_komutu = ajan_yukle() # --- YAN MENÜ (SIDEBAR) AYARLARI --- st.sidebar.title("⚙️ Eğitim Ayarları") st.sidebar.markdown("**Sen Hangi Dilde Konuşacaksın?**") ogrenci_dili = st.sidebar.radio( "Mikrofon Algılama Dili", ["İngilizce", "Türkçe"], help="İngilizce pratik yaparken 'İngilizce' seçili kalsın. Öğretmene Türkçe bir şey sormak istersen 'Türkçe'ye alabilirsin." ) # Seçime göre kod belirle stt_lang = "en-US" if ogrenci_dili == "İngilizce" else "tr-TR" st.sidebar.markdown("---") st.sidebar.markdown("**Öğretmen Aksanı**") ogretmen_sesi = st.sidebar.radio( "AI Öğretmenin Sesi", ["Amerikalı (Aria)", "Türk (Emel)"], help="Amerikalı Aria sadece İngilizceyi kusursuz okur, Türkçeyi bozarak okur. Türk Emel ise Türkçeyi kusursuz okur, İngilizceyi Türk aksanıyla okur." ) # Seçime göre model belirle tts_voice = "en-US-AriaNeural" if ogretmen_sesi == "Amerikalı (Aria)" else "tr-TR-EmelNeural" # --- ARAYÜZ (UI) --- st.title("🎙️ AI English Tutor") st.markdown("Hello! İster yazarak ister konuşarak pratik yapabiliriz.") if "mesaj_gecmisi" not in st.session_state: st.session_state.mesaj_gecmisi = [] for mesaj in st.session_state.mesaj_gecmisi: with st.chat_message(mesaj["role"]): st.markdown(mesaj["content"]) col1, col2 = st.columns([1, 1]) with col1: yazili_girdi = st.chat_input("Yazarak cevap ver...") with col2: sesli_girdi = st.audio_input("Veya konuşarak cevap ver") kullanici_girdisi = None if sesli_girdi is not None: with open("gecici_ses.wav", "wb") as f: f.write(sesli_girdi.getvalue()) with st.spinner(f"Sesin {ogrenci_dili} olarak dinleniyor..."): # Seçilen dil kodunu fonksiyona gönderiyoruz kullanici_girdisi = sesi_metne_cevir("gecici_ses.wav", dil_kodu=stt_lang) elif yazili_girdi: kullanici_girdisi = yazili_girdi if kullanici_girdisi: with st.chat_message("user"): st.markdown(kullanici_girdisi) st.session_state.mesaj_gecmisi.append({"role": "user", "content": kullanici_girdisi}) with st.chat_message("assistant"): with st.spinner("Öğretmen cevap hazırlıyor..."): try: langgraph_mesajlari = [("system", sistem_komutu)] for m in st.session_state.mesaj_gecmisi: langgraph_mesajlari.append((m["role"], m["content"])) cevap = ajan.invoke({"messages": langgraph_mesajlari}) ham_icerik = cevap["messages"][-1].content if isinstance(ham_icerik, list): son_mesaj = "".join([blok.get("text", "") for blok in ham_icerik if isinstance(blok, dict) and "text" in blok]) else: son_mesaj = ham_icerik st.markdown(son_mesaj) st.session_state.mesaj_gecmisi.append({"role": "assistant", "content": son_mesaj}) with st.spinner("Seslendiriliyor..."): # Seçilen öğretmen sesini fonksiyona gönderiyoruz ses_dosyasi = metni_sese_cevir(son_mesaj, ses_modeli=tts_voice) st.audio(ses_dosyasi, autoplay=True) except Exception as e: st.error(f"Sistem Hatası: {e}")