• v0.1 eaa98eafdc

    centralscrutinizer released this 2026-09-19 18:53:18 +02:00 | 49 commits to main since this release

    Percorso completo: registrazione del Dialer -> bozza revisionabile -> evento in calendario.
    Audio e testo restano sul telefono. Unica eccezione di rete: la geocodifica dell'indirizzo
    verso OpenStreetMap Nominatim.

    Bersaglio verificato: Pixel 8a (akita), Android 16 / SDK 36, arm64, build LineageOS
    community 4.2-a16-20260815662915, 8 GB RAM. Nessun Google Play Services.

    Cosa fa

    • Scoperta delle registrazioni del Dialer via MediaStore, idempotente.
    • Trascrizione locale con Qwen3-ASR 0.6B, diarizzazione "chi ha detto cosa".
    • Estrazione strutturata a schema (tipo intervento, quando grezzo, urgenza, indirizzo, prezzo).
    • Risoluzione date in linguaggio naturale fatta in codice proprio, non dal modello.
    • Geocodifica Nominatim con fallback: se fallisce l'evento si crea comunque con il solo indirizzo testuale.
    • Prenotazione su CalendarContract con esito tipizzato (Booked / SavedWithoutCalendar / AlreadyBooked / Invalid).
    • Enrollment vocale del titolare per distinguere la sua voce da quella del cliente.

    Verificato sul dispositivo (build installata 2026-09-19 20:27)

    Il fix dell'onboarding regge end-to-end. fede.wav era in ERRORE con
    impossibile caricare il modello ASR da .../files/models/asr — la cartella PADRE, firma
    del bug. Dopo l'aggiornamento con -r (dati intatti) la stessa registrazione eoraBOZZA_PRONTAe lo statoERRORE e scomparso del tutto dall'archivio.

    RAM: il gate del piano passa. VmHWM misurato durante una trascrizione reale:
    2,52 GiB contro il limite di 3,3 GiB richiesto. VmPeak virtuale 21 GiB (mmap del
    modello), RSS a riposo 375 MB dopo il rilascio.

    Scansione: lo switch ora fa qualcosa. A spento, dumpsys jobscheduler non mostra
    alcun lavoro per it.carazza. Portando l'intervallo a 30 minuti il job riprogrammato
    risulta TIME=+29m35s.

    ⚠️ RTF: il gate V2 del piano NON passa

    Il piano chiede RTF (audio diviso inference) >= 2,0. Misurato, per trascrizione:

    audio wall RTF piano note
    1,0 s 3,1 s 0,31 dominio caricamento modello
    14,6 s 12,4 s 1,18 misurato con questa build
    20,1 s 15,7 s 1,28
    22,5 s 40,7 s 0,55
    30,8 s 22,2 s 1,39
    848,7 s (14 min) 4103,9 s (68 min) 0,21 chiamata reale

    Media 0,82. Sotto i 30 secondi l'ASR sta piu' o meno al tempo reale; una chiamata da
    14 minuti richiede 68 minuti
    , circa 10 volte peggio del gate.

    Il tempo cresce piu' veloce dell'audio: da 22 s a 849 s l'audio e' x38, il muro e' x185.
    Comportamento superlineare, coerente con attention quadratica o pressione di memoria, non
    con un costo per secondo costante.

    Conseguenza operativa: una giornata di chiamate da 15 minuti non si processa in una
    pausa. Va deciso se il target realistico e' "clip brevi" o se serve lavorare su quantizzazione,
    thread o chunking prima di considerare l'app usabile sul flusso principale.

    Note minori emerse

    • La Diagnostica dice "RTF ultima trascrizione" ma legge ORDER BY rowid DESC. Ri-trascrivendo
      una registrazione vecchia la riga viene aggiornata in posto, il rowid non cambia, e lo schermo
      continua a riportare una riga diversa da quella appena processata.
    • ERRORE non ha retry sul tap: e' deliberato ("tap per leggere, selezione per agire"), ma il
      dialogo d'errore offre solo "Chiudi".
    • Su questo telefono le registrazioni del Dialer stanno in /storage/emulated/0/Chiamate/;
      la cartella configurata Chiamate la risolve correttamente.

    Installazione

    Firma debug: distribuzione interna, non Play Store.

    adb install -r app-debug.apk
    
    Downloads