tts fixed sst fixed

This commit is contained in:
duffyduck 2025-12-29 01:51:48 +01:00
parent 7b2e9394b7
commit 979d921c81
2 changed files with 17 additions and 11 deletions

View File

@ -995,10 +995,11 @@ Erst wenn ich [READY] sehe, starten die TICKs mit Bildern!"""
time.sleep(0.5) time.sleep(0.5)
continue continue
# WICHTIG: Wenn Claude spricht (TTS) oder wir auf TTS warten, nicht aufzeichnen! # WICHTIG: Wenn Claude spricht (TTS aktiv), nicht aufzeichnen!
# Das verhindert Echo (Mikrofon nimmt TTS auf) und # Das verhindert Echo (Mikrofon nimmt TTS auf).
# überlappende Gespräche - wir lassen Claude ausreden. # ABER: _awaiting_tts blockiert NICHT mehr das Mikrofon!
if self._speaking.is_set() or self._awaiting_tts.is_set(): # Der User soll sprechen können auch wenn TTS noch wartet.
if self._speaking.is_set():
# Falls wir mitten in einer Aufnahme waren, diese beenden # Falls wir mitten in einer Aufnahme waren, diese beenden
if self._recording.is_set(): if self._recording.is_set():
self._finalize_recording(current_session_texts) self._finalize_recording(current_session_texts)
@ -1010,7 +1011,7 @@ Erst wenn ich [READY] sehe, starten die TICKs mit Bildern!"""
result = self.stt.listen_once(timeout=1) result = self.stt.listen_once(timeout=1)
# Nochmal prüfen nach dem Hören (falls zwischendurch gemutet oder Claude spricht) # Nochmal prüfen nach dem Hören (falls zwischendurch gemutet oder Claude spricht)
if self.is_muted() or self._speaking.is_set() or self._awaiting_tts.is_set(): if self.is_muted() or self._speaking.is_set():
continue continue
if result and result.text and len(result.text) > 2: if result and result.text and len(result.text) > 2:

View File

@ -562,7 +562,12 @@ class ClaudeChatInterface:
claude_msgs = [m for m in all_messages if m.is_from_assistant] claude_msgs = [m for m in all_messages if m.is_from_assistant]
total_claude = len(claude_msgs) total_claude = len(claude_msgs)
if last_index < total_claude - 1: # WICHTIG: last_index ist 0-basiert.
# Wenn last_index=26 und total_claude=27, dann gibt es 27 Nachrichten (0-26).
# In diesem Fall ist 26 der letzte Index, also keine neuen.
# Aber wenn total_claude=28, dann gibt es eine neue (Index 27).
# Bedingung: last_index + 1 < total_claude
if last_index + 1 < total_claude:
# Es gibt neue Nachrichten! # Es gibt neue Nachrichten!
new_claude_msgs = claude_msgs[last_index + 1:] new_claude_msgs = claude_msgs[last_index + 1:]
logger.debug(f"Index-basiert: {len(new_claude_msgs)} neue Claude-Nachrichten (Index {last_index + 1} bis {total_claude - 1})") logger.debug(f"Index-basiert: {len(new_claude_msgs)} neue Claude-Nachrichten (Index {last_index + 1} bis {total_claude - 1})")
@ -900,12 +905,12 @@ class ClaudeChatInterface:
msg_id = elem.get_attribute("data-message-id") msg_id = elem.get_attribute("data-message-id")
if not msg_id: if not msg_id:
# WICHTIG: Nutze einen ZÄHLER statt Hash! # WICHTIG: Nutze einen 0-basierten INDEX statt Anzahl!
# Der Zähler ist die Anzahl der bisherigen Claude-Nachrichten. # Der Index entspricht der Position in der Claude-Nachrichten-Liste.
# Beispiel: Erste Claude-Nachricht = claude_msg_0, zweite = claude_msg_1, etc.
# Das ist stabil weil neue Nachrichten nur HINZUGEFÜGT werden. # Das ist stabil weil neue Nachrichten nur HINZUGEFÜGT werden.
# Der Hash war instabil weil der Text sich leicht ändern kann. current_claude_count = sum(1 for m in messages if m.is_from_assistant)
claude_msg_count = sum(1 for m in messages if m.is_from_assistant) msg_id = f"claude_msg_{current_claude_count}" # 0-basiert: bei 0 bisherigen -> Index 0
msg_id = f"claude_msg_{claude_msg_count}"
messages.append(ChatMessage( messages.append(ChatMessage(
id=msg_id, id=msg_id,