SmartInterview
Local AI interview copilot - Delphi VCL + Whisper + Qwen2.5 engine
- Active · last change 7-17-2026
- ★ 3 on GitHub
README
SmartInterview
Copilota AI locale per colloqui tecnici su Windows.
SmartInterview cattura l'audio di sistema (e opzionalmente il microfono), lo trascrive in locale con Whisper, e genera risposte in streaming da un modello Qwen2.5 (GGUF) — tutto senza API cloud durante il colloquio.
| Stack | Tecnologia |
|---|---|
| Interfaccia | Delphi 12 VCL (Win64) |
| Motore AI | Assembly .NET 10 SmartInterview.Engine.dll (host dotnet) |
| Speech-to-text | Whisper.net (lingua del colloquio forzata); Parakeet/sherpa-onnx opzionale |
| LLM | LLamaSharp / llama.cpp (CUDA12, Vulkan, CPU) |
Documentazione
| Documento | Contenuto |
|---|---|
| Architettura | Diagrammi, flussi, modalità ascolto, GPU backends, gate licenza |
| Setup e build | Requisiti, compilazione, prima esecuzione, troubleshooting |
| Riferimento unità Pascal | Descrizione di ogni file .pas |
| Motore C# / DLL | Assembly Engine, protocollo JSON, moduli .cs |
| Sistema licenze | Codec v5/v4, attivazione, token sessione, LicenseManager |
| Sicurezza (guida semplice) | Come funziona la protezione licenza, internet, scadenza, app aperta |
| Audit sicurezza | Dettaglio tecnico, crittografia, checklist, test |
| Unità condivise Common | Convenzioni per .pas multi-progetto |
Struttura repository
SmartInterview_Delphi/
????????? Projects.groupproj # Group project (SmartInterview + LicenseManager)
????????? Projects/
??? ????????? SmartInterview/ # Applicazione principale
??? ??? ????????? SmartInterview.dpr/.dproj
??? ??? ????????? uMainForm.* # Overlay colloquio
??? ??? ????????? uFrm*.pas # Form (licenza, splash, settings, ???)
??? ??? ????????? src/ # Unit?? Delphi (audio, bridge engine, settings)
??? ????????? LicenseManager/ # Tool generazione licenze (genera anche le chiavi di firma)
??? ????????? Engine/ # Motore C# (.NET 10)
??? ????????? Program.cs # Entry point JSON stdin/stdout
??? ????????? SmartInterview.Engine.csproj
??? ????????? *.cs
????????? Common/ # Unit?? Pascal condivise (es. uLicenseCodec)
????????? docs/ # Documentazione dettagliata
????????? README.md # Questo fileCome funziona (in breve)
flowchart TB
subgraph Delphi["SmartInterview.exe (Delphi)"]
UI[uMainForm]
Pipe[uPipeEngine]
Lic[uLicenseService]
UI --> Pipe
Lic -->|token + env vars| Pipe
end
subgraph Host["Processo figlio dotnet"]
DLL[SmartInterview.Engine.dll]
Auth[EngineSessionAuth]
Auth -->|gate licenza| DLL
end
Pipe -->|CreateProcess + pipe| Host
Pipe <-->|JSON stdin/stdout| DLL
UI --> Audio[WASAPI 16 kHz]- Avvio — verifica licenza, disclaimer, splash con download/caricamento modelli.
- Motore —
uPipeEngineavviadotnet SmartInterview.Engine.dlldalla cartellaEngineDeploy\, passando token di sessione e chiave licenza via variabili d'ambiente. - Ascolto — manuale (tieni Ctrl/Shift/Alt) o automatico (VAD su audio di sistema).
- Trascrizione — PCM inviato al motore via IPC
transcribe/transcribe_stream. - Risposta — LLM locale in streaming (
generate_stream); in modalità auto,classify_utterancefiltra le non-domande.
Il motore rifiuta tutti i comandi AI senza autenticazione licenza valida. Dettagli in Architettura → Gate licenza.
Modelli AI
I modelli non sono nel repository. Al primo avvio vengono scaricati in <exe>\models o %LOCALAPPDATA%\SmartInterview\models.
| Tier | LLM (file locale) | Trascrizione (locale) |
|---|---|---|
| Fast | response-fast.bin (Qwen2.5-3B Q4_K_M) |
whisper-fast.bin (ggml-small, ~470 MB) |
| Balanced | response-balanced.bin (Qwen2.5-7B) |
whisper-balanced.bin (ggml-medium, ~1.5 GB) |
| Max | response-max.bin (Qwen2.5-14B) |
whisper-max.bin (ggml-large-v3, ~3.1 GB) |
Motore di trascrizione: Whisper (Whisper.net), con la lingua del colloquio forzata — l'utente sceglie es. italiano e la trascrizione resta in italiano, senza scivolare in russo/inglese. Gira su GPU (CUDA→Vulkan→CPU): su una RTX 50xx via Vulkan anche large-v3 è rapido. Verificato 10/10 su voce reale italiana con termini tecnici inglesi ("Sai cos'è Unity?"). In alternativa, Parakeet TDT 0.6B v3 (sherpa-onnx, CPU, multilingue auto) è disponibile come opzione via SMARTINTERVIEW_USE_PARAKEET=1 — più veloce su CPU ma senza lingua forzata (rilevamento automatico), quindi sconsigliato quando serve una lingua fissa.
Il tier viene scelto in base alla GPU/VRAM rilevata (HardwareProbe + impostazioni utente).
Backend GPU
| GPU | Ordine preferenza LLM |
|---|---|
| NVIDIA (non-Blackwell) | CUDA12 → Vulkan → CPU |
| NVIDIA Blackwell (RTX 50xx) | Vulkan → CPU |
| Altro | Vulkan → CPU |
Build rapida
Requisiti: RAD Studio 12+ (Delphi Win64), .NET SDK 10, Windows x64.
- Apri
Projects.groupprojin RAD Studio. - Compila SmartInterview (Win64).
- La build Delphi esegue automaticamente
dotnet buildsull'engine e deploya l'output inProjects/SmartInterview/Win64/<Config>/EngineDeploy/.
Build manuale engine:
dotnet build Projects\Engine\SmartInterview.Engine.csproj -c ReleaseGuida completa: docs/setup.md.
Progetti Delphi
| Progetto | Scopo | Output |
|---|---|---|
| SmartInterview | App colloquio | Projects/SmartInterview/Win64/Release/SmartInterview.exe |
| LicenseManager | Tool licenze (interno) | Projects/LicenseManager/Win64/Release/LicenseManager.exe |
Entrambi risolvono le unità condivise da Common/ (search path ..\..\Common\).
Impostazioni utente
Salvate nel registry HKCU\Software\SmartInterview (uRegistryStore.pas):
- Lingua (default
en) - Tier modelli LLM e Whisper
- Lunghezza risposta (breve/medio/lungo)
- Tasto ascolto (Ctrl/Shift/Alt)
- Opacità overlay
- Profilo colloquio (ruolo, stack, job, esperienza)
- Parametri VAD (soglia, silenzio)
Note per manutentori
- Discovery motore:
uPipeEngine.FindEngineDllcercaSmartInterview.Engine.dllinEngineDeploy\accanto aSmartInterview.exe. - Avvio motore:
CreateProcesscon comandodotnet "<path>\SmartInterview.Engine.dll"e pipe stdin/stdout per IPC JSON-lines. - Gate licenza: variabili
SMARTINTERVIEW_SESSION,SMARTINTERVIEW_LICENSE,SMARTINTERVIEW_USER+ validazione inEngineSessionAuth.cs. - Memoria conversazione: RAM in
LocalLlmClient.cs; baseline tokens esclusi dalla % contesto UI. - Manuale vs auto: la cattura manuale risponde sempre; l'auto usa
classify_utterance+ marker[[SKIP]]. - Nuovo comando IPC: handler in
Projects/Engine/Program.cs→ wrapperuPipeEngine.pas→ calleruMainForm.pas. - Unità condivise: mettere in
Common/, non duplicare tra progetti. - Diagnostica trascrizione:
%LOCALAPPDATA%\SmartInterview\live-transcribe-diag.log.
Licenza software
SmartInterview richiede una chiave licenza valida all'avvio (formato v5 SI5-…, firmata ECDSA). Per generare chiavi usare LicenseManager (tool interno).
- Guida semplice sicurezza: docs/sicurezza-guida.md — internet, scadenza, controllo con app aperta
- Dettaglio tecnico: docs/licensing.md

