nora_chat.py hinzugefügt
This commit is contained in:
+136
@@ -0,0 +1,136 @@
|
|||||||
|
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())
|
||||||
Reference in New Issue
Block a user