import asyncio import os import time import traceback from edge_tts import Communicate from agent import Agent from util.logger import get_logger logger = get_logger("NORA CHAT") # ========================= # CONFIG # ========================= TTS_VOICE = "de-DE-AmalaNeural" # ========================= # CHAT ASSISTANT # ========================= class NoraChat: def __init__(self): logger.info("Initialisiere N.O.R.A Chat...") self.agent = Agent() self.running = True logger.info("N.O.R.A Chat bereit ✔") # ========================= # MAIN LOOP # ========================= async def run(self): logger.info("Starte Chat-Modus") while self.running: try: user_input = input("\nDu: ") if user_input.lower() in [ "exit", "quit", "stop", "beenden" ]: logger.info("Beende NORA") break if not user_input.strip(): continue logger.info(f"USER: {user_input}") # Agent Anfrage response = await self.agent.run(user_input) logger.info(f"NORA: {response}") print(f"\nNORA: {response}") # Sprach-Ausgabe await self.speak(response) except KeyboardInterrupt: break except Exception: logger.error(traceback.format_exc()) # ========================= # TTS # ========================= async def speak(self, text): try: filename = f"response_{int(time.time())}.mp3" tts = Communicate( text, voice=TTS_VOICE ) await tts.save(filename) # Ausgabe über Standard-Audio os.system( f"mpg123 -q {filename}" ) os.remove(filename) except Exception: logger.error("TTS Fehler") logger.error(traceback.format_exc()) # ========================= # MAIN # ========================= async def main(): nora = NoraChat() await nora.run() if __name__ == "__main__": asyncio.run(main())