fix(voice): instrucțiune de limbă inline + fallback Supertonic pe română

Markerul opac [tts-lang:en] depindea de regula din VOICE_MODE.md, aflată
la ~30k caractere distanță în system prompt — modelul o rata pe ~1 din 5
turnuri. Răspunsul în română era apoi respins integral de pocket-tts
(English-only) și turnul rămânea fără audio.

- src/router.py: markerul poartă instrucțiunea inline (un singur token,
  acoperit în continuare de strip-ul anti-jailbreak); 5/5 EN la repro
- src/voice/tts_stream.py: dacă modelul tot scapă română pe o voce
  pockettts, blocul cade pe Supertonic (M2, ro) în loc de tăcere;
  coada TTS transportă (clause, voice, lang) per clauză
- tools/tts.py: looks_romanian public (folosit de tts_stream)
- personality/VOICE_MODE.md: regula gated pe prefixul [tts-lang:en
- tests: 4 teste noi fallback + expectații marker actualizate

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-11 19:20:28 +00:00
parent 61d667ec65
commit 80eb8034b3
6 changed files with 113 additions and 15 deletions

View File

@@ -48,8 +48,18 @@ def _strip_leading_voice_tokens(text: str) -> str:
text = stripped
# Instrucțiunea de limbă călătorește inline cu turnul: regula din VOICE_MODE.md
# singură (la ~30k caractere distanță în system prompt) e ratată de model pe
# ~1 din 5 turnuri (observat 2026-07-11). Fără `]` interior, deci acoperită de
# _LEADING_VOICE_TOKEN_RE.
_TTS_LANG_EN_MARKER = (
"[tts-lang:en — reply entirely in English: the active TTS voice "
"cannot speak Romanian] "
)
def _voice_turn_lang_marker() -> str:
"""`'[tts-lang:en] '` dacă vocea activă de voice mode e pe un engine
"""`_TTS_LANG_EN_MARKER` dacă vocea activă de voice mode e pe un engine
English-only (pocket-tts), altfel `''`.
Citește config fresh de pe disc (nu singleton-ul modulului) pentru că
@@ -60,7 +70,7 @@ def _voice_turn_lang_marker() -> str:
from tools.tts import engine_for_voice
voice = Config().get("voice.default_voice", "M2") or "M2"
if engine_for_voice(voice) == "pockettts":
return "[tts-lang:en] "
return _TTS_LANG_EN_MARKER
except Exception as e: # noqa: BLE001
log.warning("voice lang marker lookup failed: %s", e)
return ""