Fix garbled replies: clear input buffer on mic on/off, guarded cancel, ask to repeat instead of guessing
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LzKpYaEsuWDevuNnvSjcFW
This commit is contained in:
@@ -30,6 +30,8 @@ Kako odgovaraš na pitanja:
|
||||
Ako dijete kaže "pojednostavi", "jednostavnije", "ne razumijem", "kao za male", "lakše": sljedeći odgovori su kraći, sa najjednostavnijim riječima, kratkim rečenicama i poređenjima iz svakodnevnog života (kuhinja, igralište, lopta, voda). Svaki sljedeći zahtjev spušta nivo dalje.
|
||||
Zapamti trenutni nivo i drži ga do kraja razgovora ili dok dijete ne zatraži promjenu. Ako znaš uzrast djeteta, kreni od nivoa koji odgovara tom uzrastu.
|
||||
- Ako nešto ne znaš ili nisi siguran, reci to iskreno. Ne izmišljaj brojeve ni imena.
|
||||
- AKO NISI JASNO ČUO ili RAZUMIO pitanje, NE NAGAĐAJ i ne pričaj o nasumičnoj temi. Reci kratko: "Nisam te dobro čuo, možeš li ponoviti?" i sačekaj.
|
||||
- Odgovaraj SAMO na ono što je dijete stvarno pitalo. Ne otvaraj nove teme koje dijete nije spomenulo i ne nabrajaj zanimljivosti koje niko nije tražio.
|
||||
- Kad odgovoriš na pitanje o nekoj temi, možeš JEDNOM ponuditi: "Hoćeš da ti odštampam sažetak o tome?" Ne nudi to poslije svakog odgovora.
|
||||
- Za matematiku i zadaće: ne daj samo rezultat, objasni korak po korak i pusti dijete da samo dođe do odgovora kad je moguće.
|
||||
- Razgovor ne traži nikakvu potvrdu; potvrda je obavezna samo prije štampanja.
|
||||
@@ -158,6 +160,14 @@ class Assistant:
|
||||
ok = False
|
||||
await self.notify_model(("GOTOVO. " if ok else "GREŠKA. ") + result + " Reci to djetetu kratko, na bosanskom.")
|
||||
|
||||
async def clear_input(self) -> None:
|
||||
"""Odbaci sve što je na serveru u ulaznom baferu (nedovršeni komadići govora)."""
|
||||
if self.conn:
|
||||
try:
|
||||
await self.conn.send({"type": "input_audio_buffer.clear"})
|
||||
except Exception: # noqa: BLE001
|
||||
log.exception("input_audio_buffer.clear nije uspio")
|
||||
|
||||
async def interrupt_speech(self) -> None:
|
||||
"""Prekini govor koji je u toku (pozadinski poslovi nastavljaju)."""
|
||||
speaking = self.speaker.is_playing(0.0) or self.response_active
|
||||
@@ -166,7 +176,8 @@ class Assistant:
|
||||
try:
|
||||
await self.conn.send({"type": "response.cancel"})
|
||||
except Exception: # noqa: BLE001
|
||||
log.exception("response.cancel nije uspio")
|
||||
pass
|
||||
await self.clear_input()
|
||||
if speaking:
|
||||
await self.speaker.clear()
|
||||
log.info("govor prekinut (mikrofon ugašen)")
|
||||
@@ -223,6 +234,7 @@ class Assistant:
|
||||
if not self.mic.running:
|
||||
await self.mic.start()
|
||||
log.info("mikrofon uključen, slušam")
|
||||
await self.clear_input()
|
||||
await self.speaker.write(audio.tone_on())
|
||||
chunk = await self.mic.read()
|
||||
if not chunk:
|
||||
|
||||
Reference in New Issue
Block a user