La v6 aggiunge la gestione interattiva delle quote Gemini senza riavviare l'analisi e senza perdere i chunk già completati. Aggiunge inoltre la scelta accessibile per attivare o disattivare il riconoscimento nominale dei personaggi e il glossario.
- Il worker distingue gli errori transitori generici dalle risposte di quota
429/RESOURCE_EXHAUSTEDche contengono riferimenti a quota o rate limit. - Timeout, rete, 5xx, sovraccarico e altri errori temporanei continuano a essere ritentati ogni 5 secondi.
- Alla prima quota esaurita per un modello nella richiesta corrente, il worker emette
QUOTA:{...}e si blocca su stdin senza terminare il processo. - Sonarpad mostra una domanda accessibile con tre scelte: provare un altro modello, continuare ad attendere o interrompere.
- Se viene scelto un altro modello, Sonarpad propone un identificatore alternativo dall'elenco già caricato e permette di modificarlo mediante una finestra di testo accessibile.
- La risposta Rust viene inviata al worker come JSON line-oriented:
switch,waitoppurestop. - Con
switch, il worker valida il modello, ripete soltanto la richiesta Gemini corrente e aggiorna l'override in memoria per tutti i chunk successivi. - Con
wait, il modello non cambia e riprendono i retry automatici. - Con
stop, il worker restituiscecancelled=true; Sonarpad non prosegue con TTS, ducking o esportazione. - Il modello effettivamente usato al termine viene restituito dal worker e salvato nel progetto JSON, invece di registrare necessariamente quello selezionato all'avvio.
- La preferenza
audio_description_gemini_modelviene aggiornata immediatamente quando l'utente sceglie un modello alternativo. - La cache del worker passa a
audio_description_bridge_v6.exe, impedendo il riuso del vecchio eseguibile privo del protocollo bidirezionale.
- La casella Prova a riconoscere i personaggi e usa i loro nomi è selezionata per impostazione predefinita.
- Il valore viene trasmesso da
audio_description_window.rsaAudioDescriptionJob, quindi aAudioDescriptionBridgeRequeste infine aenable_character_glossarynel worker. - Con la casella attiva, Gemini crea il glossario, riusa i nomi già riconosciuti nei chunk successivi e applica la pulizia delle ripetizioni nominali.
- Con la casella disattivata, il prompt impone
character_glossary: [], vieta di identificare o nominare i personaggi, non trasferisce identità tra chunk e salta la pulizia basata sui nomi. - La scelta effettiva viene salvata nel progetto JSON. I progetti v4/v5 privi del nuovo campo vengono letti come
truegrazie al default Serde compatibile. - La finestra inizializza la casella con
BST_CHECKED; la scelta non viene imposta globalmente alle altre funzioni Gemini.
python3 -m py_compilesul worker e sugemini_helpers.py: superato.audio_description_bridge.py --self-test: superato; il risultato includeinteractive_quota_decisions=trueeoptional_character_glossary=true.- Test diretto del gestore quota con stdin simulato:
switchrestituisce il nuovo modello,waitrestituisce attesa estoprestituisce annullamento. - Test simulato di
generate_content_with_retry: quota sul modello A, scelta del modello B, validazione di B, ripetizione della sola richiesta corrente e persistenza di B per le richieste successive: superato. - Test diretto dei prompt: con riconoscimento attivo sono presenti schema e continuità del glossario; con riconoscimento disattivo il glossario è imposto vuoto e i nomi sono vietati: superato.
- Parsing JSON di tutti i 17 file di traduzione: superato.
- Verifica della presenza delle quattro nuove chiavi i18n, inclusa
audio_description.recognize_characters, in tutte le lingue: superata. - Verifica statica che ogni costruzione di
AudioDescriptionCallbacksinizializzi il nuovo campoquota: superata. - Verifica statica del protocollo Rust: stdin del worker è
piped, gli eventiQUOTAvengono deserializzati e le decisioni vengono scritte e flushate sul processo figlio. - Verifica lessicale del bilanciamento di parentesi e delimitatori nei quattro file Rust modificati: superata.
- Verifica che il worker non importi né esegua
ffmpeg.exe,ffprobe.exe, TTS, SAPI di Omni, VLC oaccessible-output2: superata. - Applicazione della patch v5→v6 a una copia pulita della v5 e confronto ricorsivo con il sorgente v6: nessuna differenza.
In questo ambiente non sono presenti cargo, rustc, Windows, le DLL FFmpeg di Sonarpad e i backend TTS Windows. Non è stato possibile eseguire cargo check o simulare una finestra Win32 reale. Prima della pubblicazione occorre compilare su Windows e provare almeno questi casi: errore temporaneo 503, quota sul modello iniziale con cambio modello, scelta “continua ad attendere”, scelta “interrompi” e salvataggio del progetto con il modello effettivamente usato.