DLT Chat Plugin · v0.7.0
MPL-2.0
COVESA DLT Viewer · Plugin

Chat con i tuoi
log automotive.

Un'interfaccia conversazionale per analizzare file DLT — filtri rapidi, ricerca strutturata e analisi assistita da AI, con fallback rule-based sempre disponibile.
CarPlay Android Auto Ollama · OpenAI · LocalAI Qt 5.15+ / 6.x C++17
DLT · v0.7
Contesto
01 / Il problema
Il problema

Analizzare log DLT è lento,
manuale e poco accessibile.

Oggi
Ricerca manuale
Scorrere migliaia di righe di log per trovare un singolo evento di handshake fallito.
Oggi
Filtri complessi
Espressioni regex e filtri combinati che richiedono memoria di sintassi e contesto del progetto.
Oggi
Conoscenza tribale
Ogni team accumula trucchi e pattern personali — difficili da trasferire ai nuovi ingegneri.
Ingegneri automotive, sviluppatori embedded e team di validazione CarPlay / Android Auto perdono ore in ricerca quando potrebbero fare domande.
Visione
02 / La soluzione
La soluzione

Una chat-bar dentro DLT Viewer
che capisce i log automotive.

01
Linguaggio naturale
Chiedi "trova i timeout su iAP2" invece di scrivere regex.
02
76 pulsanti rapidi
Filtri pronti per livello, dominio ed evento — un click, zero digitazione.
03
AI opzionale
Ollama, OpenAI, LocalAI o provider custom — sempre con fallback rule-based.
04
Automotive-aware
Classifica CarPlay, Android Auto, eventi di sessione, audio focus e mDNS.
76
Pulsanti rapidi
9
Eventi automotive
4
Provider LLM
~70+
Test case
Target
03 / Per chi è
Target utente

Chi passa la giornata dentro un terminale di log.

Persona 01
Ingegnere automotive
Sviluppo e validazione sistemi infotainment. Cerca cause di disconnessione CarPlay durante test su strada.
CarPlayiAP2Bench test
Persona 02
Sviluppatore embedded
Lavora su Android Auto / AOAP. Debugga handshake mDNS, focus video, sensor streaming.
Android AutoAOAPUSB
Persona 03
Team diagnostica
Triage su piattaforme connesse — vuole categorizzare errori e produrre report CSV condivisibili.
TriageReportValidation
Parte I
Architettura
Parte 01

Architettura
& flusso dati.

Plugin Qt, pattern Strategy, inverted index e signal/slot. Ogni componente è isolato e testabile.
Architettura
04 / Pattern di design
Pattern di design

Otto pattern in cooperazione.

PatternDove viveScopo
PluginDltChatPluginIntegrazione con DLT Viewer via QDLTPluginInterface
StrategyDltAnalyzerInterfaceAnalisi intercambiabile rule-based o LLM
ObserverQt Signals / SlotsComunicazione UI ↔ analyzer
Circuit BreakerDltLlmAnalyzerInterface5 fallimenti → 60s open; protegge da provider AI instabili
Token BucketDltLlmAnalyzerInterfaceRate limit: 10 token, 1 refill / secondo
LRU CachePlugin (10k) · LLM (1k)Risposte e query riutilizzate in O(1)
Worker ThreadDltBulkAnalyzerWorkerBulk analysis in QThread non-blocking
FactoryDltLlmAnalyzerFactoryCrea l'analyzer giusto per ogni provider
Architettura
05 / Flusso dati
Flusso dati

Dal file DLT alla risposta.

DLT Viewer (load file) │ ▼ initFileStart() → reset stato initMsg(msg) → ingestMessage() per ogni messaggio │ ▼ ingestMessage() ├─ Decodifica messaggio DLT → LogEntry ├─ AutomotiveLogParser::classify() (dominio + evento) └─ Aggiorna invertedIndex │ ▼ onQuerySubmitted(query) ├─ Preset match? → filterByPreset() ├─ Comando speciale? → ruleBasedAnalyzer ├─ Level / category? → ruleBasedAnalyzer └─ Testo libero → liveSearch() (inverted index + regex) │ ▼ form->appendMessage() + setResults() + highlightIndices()
Inverted index
Ricerca O(K)
"error"   → {0, 1, 5, 12, 45}
"timeout" → {1, 67, 89}
"iap2"    → {5, 12, 34}

# AND set-intersection
"error timeout"  →  {1}
Le query AND intersecano i set di indici. Nessun full scan dei payload per query con keyword conosciute.
Limiti operativi
500k
Entry max
1.000
Display cap
10k
Cache plugin
Parte II
Interfaccia
Parte 02

Interfaccia
& pulsanti rapidi.

Una griglia 13 righe × 76 pulsanti, color-coded. Operazioni frequenti senza digitare.
UI
06 / 76 pulsanti rapidi
UI · griglia 13 righe · 76 pulsanti

Settantasei comandi, un click ciascuno.

Errors
error
Warnings
warn
Infos
info
Debug
debug
Verbose
verbose
CarPlay
carplay
Android Auto
androidauto
Video Focus
video_focus
Audio Ducking
audio_ducking
mDNS
mdns
Sensor Data
sensor_data
Auth Errors
auth_errors
Session
session
Summary
summary
Timeline
timeline
Pattern
pattern
Help
help
Keywords
keywords
Categories
categories
Clear
(clear)
CSV
(export)
Riga 0 · Livelli (6 pulsanti)
Righe 1-5 · Categorie, connettività, media
Righe 6-12 · Proiezione, smart filter, analisi
Griglia illustrativa · il pannello mostra 76 pulsanti in 13 righe (0–12), scorrevoli.
UI
07 / Pannello Chat
Chat Log Assistant · panel

Dove vive: dentro DLT Viewer.

DLT Viewer — View · Panels · Chat Log Assistant
AI Online · llama3.2:1b
CHAT HISTORY
user ▸ find timeouts on iAP2 handshake
asst ▸ Trovati 3 eventi di timeout su iAP2.
  [index:1247] iap2 handshake timeout (5s)
  [index:3380] iAP2 link_check timeout
  [index:5012] authentication phase timeout
user ▸ summary
asst ▸ 12 482 entries · 48 errors · 211 warnings
  Domini: CarPlay 3 921 · Android Auto 1 854
  Top context: iAP2 (1 244) · AOAP (612)
› ask the log…
Send
RESULTS · 3 of 12 482
12:08:31.245  ERR  CARP iap2   handshake timeout (5s)
12:08:36.111  ERR  CARP iap2   link_check timeout
12:08:41.880  WRN  CARP iap2   auth phase slow (2.1s)
12:08:45.002  INF  CARP iap2   session re-established
12:09:02.451  ERR  CARP iap2   authentication timeout
12:09:05.012  SES  CARP mdns   _apple-mobdev2._tcp resolved
▸ double-click → jump to entry in DLT Viewer
Parte III
Analisi
Parte 03

Analisi rule-based
& comandi.

Sempre disponibile, zero dipendenze esterne. Filtri per livello, dominio, categoria, e query combinate.
Analisi
08 / Filtri rule-based
Filtri rule-based

Tre dimensioni, una query.

Livello
errorERROR + FATAL
warnWARN
infoINFO
debugDEBUG
verboseVERBOSE
Dominio
carplayAPID com.apple.carplay
· payload iap2 / AirPlay
androidautoAPID CarAppService / AOAP
· payload USB_ACCESSORY / AOA
Categoria
canBus CAN
securitySicurezza
memoryMemoria
performancePerformance
diagnosticDiagnostica
gpsGPS
Query combinate
error can
errori CAN bus
warn carplay
warning dominio CarPlay
info security timeout
info sicurezza + parola libera
debug memory androidauto
debug memoria AA
Analisi
09 / Comandi speciali
Comandi speciali · categorizzazione errori

Comandi che cambiano la lente.

Comandi
helpLista comandi disponibili
summaryConteggi livello · top context · domini · range temporale
timelineLista cronologica completa
patternRaggruppa duplicati per payload simile
keywordsElenca tutte le keyword di categoria
categoriesStesso di keywords
Categorizzazione errori (7)
Comunicazionetimeout · connection refused · link down · handshake failed
Memoriaout of memory · allocation failed · heap · stack overflow
Sicurezzaauth failed · unauthorized · invalid certificate · TLS / SSL
Configurazioneinvalid config · missing parameter · wrong version
Hardwarehardware fault · sensor failure · I²C · SPI · GPIO
Timeouttimeout error · timeout occurred
Protocolloprotocol error · malformed · unexpected response
Ricerca libera → tokenize · stop-word filter · intersezione inverted index · regex fallback se 0 keyword.
Parte IV
AI / LLM
Parte 04

AI opzionale,
resilienza obbligatoria.

Ollama, OpenAI, LocalAI, custom. Con circuit breaker, rate limiter, cache LRU e fallback automatico.
AI
10 / Provider supportati
Provider LLM

Locale, cloud, o custom — scegli tu.

ProviderEndpoint defaultRichiestaRisposta
Ollamalocalhost:11434/api/generate{model, prompt, options}{"response":"…"}
OpenAIapi.openai.com/v1/chat/completions{model, messages[], …}{"choices":[…]}
LocalAIlocalhost:8080/v1/completionsstile Ollamastile Ollama
Custom(configurabile)Ollama / OpenAIOllama / OpenAI
Indicatore stato AI
AI Online
connessione attiva
AI Offline
connessione fallita o cooldown
Non configurato
provider non impostato
Refresh ogni 30s · AI_AVAILABILITY_TTL_MS = 30000
Dialog di configurazione
Provider
Ollama / OpenAI / LocalAI / Custom
Endpoint
auto-fill al cambio provider
API key
solo OpenAI
Model
llama3.2:1b (default)
Max tokens
4096
Temperature
0.7
Timeout
120 s
Azione
Test Connection
AI
11 / Meccanismi di resilienza
Resilienza

L'AI è un plus, non un punto di fallimento.

● Closed
Normale
Richieste passano. Conta i fallimenti consecutivi: alla 5ª → APERTO.
● Open
60 s di cooldown
Tutte le richieste rifiutate immediatamente. Scaduto il timer → SEMI-APERTO.
● Half-open
Probe
Una sola richiesta di prova. Successo → CHIUSO · Fallimento → APERTO (reset).
Token bucket · rate limit
10 token · 1 / s
Ogni richiesta consuma un token. Se vuoto, la richiesta è rimandata con QTimer fino al refill.
LRU cache
10 000 + 1 000
Plugin · 10k entry, evizione LRU. LLM analyzer · 1k entry, half-flush quando pieno.
Fallback automatico
rule-based
Se AI offline, breaker aperto o timeout → cade su rule-based. L'utente riceve sempre una risposta.
AI
12 / Flusso richiesta AI
Flusso AI · onAiQuerySubmitted()

Cinque uscite, una risposta garantita.

onAiQuerySubmitted(query) │ ├─ AI non configurata / offline? │ → fallback rule-based │ ├─ Query in cache? │ → restituisci risultato cached │ ├─ Rate limit? │ → attendi con QTimer::singleShot │ └─ Invia HTTP POST ├─ success → parse + cache update └─ failure → circuit breaker, fallback
Prompt engineering
  1. Contesto · descrizione file DLT + totale entry
  2. Entry filtrate · max 100 · [index:N] ts [lvl] apid ctid | payload
  3. Extra context · match da filtri utente
  4. Domanda · query originale
Parsing della risposta
  • Testo principale
  • Riferimenti [index:N] → click-navigabili
  • Numeri nudi < 10 000 come fallback
AI
13 / Bulk analysis
Bulk analysis

Classifica l'intero log in background.

Architettura
DltBulkAnalyzerWorker
QThread · processing async
DltBulkAnalyzer
API alto livello · pause / resume / cancel
Pipeline
  1. Entry divise in chunk (default 100/chunk)
  2. Ogni chunk inviato all'LLM con prompt strutturato
  3. Risposta parsata: [INDEX]|CATEGORY|SUMMARY|TAGS
  4. Aggregazione: lista tag e categorie trovate
Idle Processing Paused Completed Error
# Esempio risposta bulk
[0]|CONNECT|Connection established|connection,handshake
[1]|AUDIO|Audio focus gained|audio,focus,carplay
[2]|ERROR|Timeout on iAP2 handshake|timeout,carplay,error
[3]|SENSOR|Gyro stream started|sensor,gyro,aoap
[4]|SECURITY|TLS pairing complete|tls,auth,security

# Query post-bulk
tag:handshake
category:SECURITY
Progress
62% · chunk 31 / 50 · 3 100 entries
Automotive
14 / Classificazione
AutomotiveLogParser

Riconosce dominio ed evento, automaticamente.

Domini
CarPlay
  • APID com.apple.carplay
  • payload contiene iap2
  • payload contiene AirPlay
  • payload contiene CARSIM
Android Auto
  • APID CarAppService
  • APID AOAP / AndroidAuto
  • payload USB_ACCESSORY
  • payload AOA
8 preset filtro
carplay androidauto video_focus audio_ducking mdns sensor_data auth_errors session
Eventi riconosciuti (9)
video_focus_lostvideo · focus (CarPlay)
audio_duckingducking · audio duck
mdns_handshake_apple-mobdev2 · mdns
hid_eventhid · keyboard · touch
auth_tlstls · auth · certificate · pairing
sensor_datasensor · gyro · gps · accelerometer
audio_focusaudio focus · audio manager
session_startsession start · link established
session_stopsession stop · disconnect · link down
Personalizzazione
15 / Filtri utente
Filtri utente · JSON

Regole di evidenziazione su misura.

{
  "version": "1.0",
  "filters": [
    {
      "label":   "iAP2 Connection Error",
      "pattern": "iap2.*(error|fail|timeout)",
      "color":   "#FF4444",
      "level":  ["error", "fatal"]
    },
    {
      "label":   "mDNS Handshake",
      "pattern": "mdns|bonjour|_apple-mobdev2",
      "color":   "#4488FF"
    },
    {
      "label":   "Video Focus Lost",
      "pattern": "video.*focus",
      "color":   "#FF8800",
      "domain":  "carplay"
    }
  ]
}
Campi
labelnome descrittivoobbligatorio
patternregex di matchobbligatorio
fieldspayload · apid · ctid · ecuopzionale
colorhex highlight#FFE680
levellivelli consentitiopzionale
domaincarplay / androidautoopzionale
enabledattivodefault true
Comportamento
  • Applicati dopo ogni query
  • Una entry può matchare più filtri — vince l'ultimo
  • Path configurato in dlt_chat_plugin.ini → [Behavior] → userFiltersPath
Output
16 / Export & navigazione
Export CSV · navigazione log

Dai risultati al foglio, e dall'AI al log.

CSV · due modalità
exportToCsv()
Esporta solo i risultati visualizzati con la query sorgente.
exportAllEntries()
Esporta tutte le entry caricate nel plugin.
UTF-8 · escaping CSV standard · sanitizzazione spazi bianchi
Colonne
#IndexTimeTimestampLevel ECUAPIDCTIDDomainPayloadSource Query
Navigazione log
highlightIndices()
Setta i marker manuali in DLT Viewer · le entry diventano evidenziate.
Double-click → scrollToEntry()
Trova indice, imposta marker, seleziona l'entry nella vista principale.
Limiti operativi
1 000
display cap
500 000
entry max
Operazioni
17 / Configurazione
Persistenza · dlt_chat_plugin.ini

Configurazione semplice, persistente.

[Analyzer]
type=rule-based
llmEndpoint=http://localhost:11434/api/generate
llmApiKey=
llmModel=llama3.2:1b
bulkAnalysisEnabled=false

[Behavior]
maxResults=1000
llmTimeout=120000
highlightColor=#FFE680
userFiltersPath=
ChiaveDefault
typerule-based
llmEndpointlocalhost:11434
llmApiKey(vuoto)
llmModelllama3.2:1b
bulkAnalysisEnabledfalse
maxResults1000
llmTimeout120000
highlightColor#FFE680
userFiltersPath(vuoto)
save: saveConfig() su shutdown · load: loadConfig() su avvio.
Qualità
18 / Test suite
Test suite

~70+ test case · 9 suite.

~70+
test case totali
9
suite
Suite (9)
test_rulebasedanalyzer17 testcomandi · filtri · simplifyPayload
test_automotivelogparser14 testclassificazione CarPlay / AA · eventi · preset
test_llmutils9 testparsing risposta · build prompt · request body
test_contextualextractorfinestra contesto intorno ai match
test_conversationmanagercronologia multi-turn AI
test_temporalcorrelatorcorrelazione finestra temporale
test_fibexenricherarricchimento FIBEX XML
test_dltexport7 testCSV escaping · sanitizzazione · export full
test_userfiltermanager8 testload · match domain / level · enabled count
# Esecuzione
$ cd tests
$ mkdir build && cd build
$ cmake ..
$ cmake --build .
$ ctest

# Output
Test project /…/dlt-chat-plugin/tests/build
   Start  1: rule-based-analyzer
   Start  2: automotive-log-parser
   Start  3: contextual-extractor
   Start  4: conversation-manager
   Start  5: temporal-correlator
   Start  6: fibex-enricher
   Start  7: llm-utils
   Start  8: dlt-export
   Start  9: user-filter-manager

100% tests passed, 0 tests failed
Build matrix
Qt 5.15 + Qt 6.x CMake 3.16 + C++17 Linux Windows MSVC Windows MinGW macOS (Homebrew)
Parte V
Demo
Parte 05

Script di demo
in dieci blocchi.

Da zero al wow in 15 minuti: setup, pulsanti, query combinate, comandi speciali, AI, filtri, export, navigazione e resilienza.
Demo
19 / Script · parte 1
Demo · blocchi 1–5

Setup, pulsanti, query, comandi, ricerca.

Blocco 01 · 2 min
Setup e prima impressione
Aprire DLT Viewer con un log CarPlay + Android Auto. Attivare il pannello Chat Log Assistant. Mostrare la griglia 13 righe · 76 pulsanti.
Blocco 02 · 3 min
Pulsanti rapidi
Errors → Warnings → CarPlay → Android Auto → Summary. "76 pulsanti per le operazioni più comuni, zero digitazione".
Blocco 03 · 2 min
Query combinate
error can · warn carplay timeout. Livello + dominio + categoria per filtri precisi.
Blocco 04 · 3 min
Comandi speciali
timeline · pattern · categorizza. Errori classificati in 7 categorie.
Blocco 05 · 1 min
Ricerca testo libero
Digitare una keyword qualsiasi. Inverted index per risposta immediata, regex fallback se 0 token validi.
Demo
20 / Script · parte 2
Demo · blocchi 6–10

AI, filtri, export, navigazione, resilienza.

Blocco 06 · 3 min
AI / LLM
Aprire dialog AI · provider · Test Connection. Query: "Find all timeout errors related to iAP2 handshake". Risposta con indici cliccabili.
Blocco 07 · 2 min
Filtri utente
Mostrare automotive_filters_example.json · configurare path · eseguire query · evidenziazione a colori.
Blocco 08 · 1 min
CSV export
Click su CSV dopo una query. Aprire il file. Pronto per condivisione con team validazione.
Blocco 09 · 1 min
Navigazione
Double-click su un risultato. DLT Viewer salta all'entry corrispondente. Bidirezionale: dalla risposta al log e viceversa.
Blocco 10 · 1 min (opzionale)
Resilienza AI
Disconnettere Ollama/OpenAI · ripetere una query. Il plugin cade automaticamente su rule-based. "L'AI è un plus, non un punto di fallimento".
Closing
21 / Domande frequenti
FAQ

Cosa chiedono di solito.

DomandaRisposta
Serve obbligatoriamente un LLM?No. L'analisi rule-based è completa e sempre disponibile; l'AI è opzionale.
Quali modelli LLM supporta?Qualsiasi modello Ollama locale, GPT (OpenAI) o provider compatibile via Custom.
Come gestisce file di log grandi?Entry limit 500k · display cap 1k · inverted index O(K) per le ricerche.
Funziona su Linux, Windows e macOS?Sì. Qt è multipiattaforma; CI testato su Linux e Windows (MSVC); macOS supportato con build manuale via Homebrew.
Come si configura l'AI?Dialog grafico con Test Connection, oppure file INI dlt_chat_plugin.ini.
Si possono aggiungere filtri custom?Sì. File JSON con regex, campi, colori, vincoli per livello e dominio.
Come si estende il plugin?Implementando DltAnalyzerInterface — pattern Strategy, nuovo backend, zero modifiche al core.
Grazie
Fine
DLT Chat Plugin · v0.7.0 · MPL-2.0

Chatta. Filtra.
Esporta. Ripeti.

Un assistente conversazionale nativo per chi vive nei log automotive — dalla prima ispezione al report finale, senza mai uscire da DLT Viewer.
Stack
Qt 5.15+ / 6.x · C++17 · CMake
Licenza
MPL-2.0
Host
COVESA DLT Viewer plugin
END · v0.7