chore: auto-commit from dashboard

This commit is contained in:
2026-07-12 19:28:42 +00:00
parent 80eb8034b3
commit 4d2dbfb8a7
22 changed files with 582 additions and 520 deletions

View File

@@ -17,6 +17,13 @@ Lecții capturate din corectările lui Marius. Citește acest fișier la începu
<!-- Lecțiile se adaugă mai jos, cele mai noi sus. -->
## Transliterează și numele proprii pe turnuri `[tts-lang:en]` — un singur diacritic declanșează fallback pe Supertonic
**Data:** 2026-07-11
**Context:** Marius a întrebat vremea la Constanța (turn de voce, vocea activă = pocket-tts, marker `[tts-lang:en]`). Am scris răspunsul în engleză dar am păstrat "Constanța" cu ț original. Rezultatul audio a venit cu o voce Supertonic, nu cu Marius 4 (pocket-tts) cum se aștepta Marius.
**Greșeala:** Am presupus greșit că "engleză" înseamnă doar propoziții englezești — am lăsat un nume propriu (Constanța) netranslit. `tools/tts.py::looks_romanian()` (folosit în `src/voice/tts_stream.py:213`) verifică prezența oricărui caracter din `_RO_DIACRITICS` (ă/â/î/ș/ț), indiferent de context — UN SINGUR caracter e suficient. Codul a funcționat corect conform design-ului: a detectat diacriticul, a presupus că tot blocul e română netradusă, și a căzut intenționat pe Supertonic (mai bine o voce RO decât tăcere totală) — vezi comentariul din `tts_stream.py:213-222`. Deci nu a fost bug de cod, ci scriere incompletă din partea mea.
**Regula:** Pe orice turn cu marker `[tts-lang:en]`, transliterează ȘI numele proprii/toponimele (Constanța → Constanta, Brașov → Brasov, etc.) — nu doar propozițiile. Verifică explicit că răspunsul nu conține NICIUN caracter din `ăâîșțĂÂÎȘȚşţŞŢ` înainte de a trimite, altfel guard-ul din `tts_stream.py` face fallback silențios pe Supertonic și vocea aleasă de Marius (pockettts) nu se aude deloc.
**Când se aplică:** Orice răspuns pe un turn de voce cu vocea activă pockettts (Marius 1-4, Paula 1-3, alba) și marker `[tts-lang:en]` în prefix. Verifică inclusiv toponime, nume, abrevieri românești din text.
## Intră în plan mode ÎNAINTE de a executa orice modificare de cod
**Data:** 2026-05-28
**Context:** Marius a descris o cerință de îmbunătățire a comenzii `/audio` cu URL (chunk by chunk). Am implementat direct fără plan mode.
@@ -65,3 +72,10 @@ Lecții capturate din corectările lui Marius. Citește acest fișier la începu
**Greșeala (evitată):** Construirea unui strat de corecție hand-curat (întreținere perpetuă, risc de regresie pe cuvinte ambigue) când fix-ul real era un model finetuned cu același cost de inferență.
**Regula:** Înainte de a peticit output-ul unui model ML cu post-procesare rule-based, întreabă: (1) cine e CONSUMATORUL textului? (un LLM tolerează erori; un parser regex nu); (2) există un model finetuned care fixează la sursă cu același cost? Spike-uiește modelul ÎNAINTE de a scrie straturi de corecție. Verifică unde merge output-ul prin cod, nu presupune un gate care „pare" că există.
**Când se aplică:** Orice îmbunătățire de calitate STT/OCR/ML output. Tool de spike: `tools/voice_stt_spike.py`.
## Fallback-urile nu trebuie să schimbe identitatea percepută (vocea) — degradează în interiorul aceleiași identități
**Data:** 2026-07-11
**Context:** Fix pentru voice mode: când modelul scăpa diacritice RO pe o voce pocket-tts (English-only), am ales fallback pe Supertonic M2 (altă voce, română) ca să evit tăcerea. Un singur nume propriu („Constanța") într-un răspuns altfel englezesc a comutat vocea întregului bloc — Marius a perceput asta ca bug mai grav decât problema inițială.
**Greșeala:** Am optimizat pentru „să se audă ceva" fără să întreb ce dimensiune e prioritară pentru user. Vocea clonată E produsul; schimbarea ei e regresia maximă percepută.
**Regula:** Când un input parțial invalid ajunge la un sistem cu identitate configurată de user (voce, persona, stil), remediază conținutul ca să treacă (transliterare, sanitizare), nu comuta pe altă identitate. Fallback pe alt engine/voce doar la eșec TEHNIC (server picat), nu la eșec de conținut.
**Când se aplică:** Orice pipeline TTS/persona cu fallback. Implementare: `fold_ro_diacritics` în tools/tts.py + push_text în src/voice/tts_stream.py.