Repository navigation
Come funziona
Alessio Casarotto edited this page Oct 20, 2026
·
6 revisions
flowchart TB
U([Tu]) --> UI
DC([Discord]) --> BOT[Bot Discord]
subgraph PC[Il tuo computer - tutto in locale]
UI[Interfaccia web SvelteKit<br/>chat, temi, comandi /, memoria, progetti]
BOT
SRV[llama-server<br/>router, porta 8080]
subgraph AUX[Servizi ausiliari]
SEARCH[search_server 8091<br/>ricerca web]
STORE[store_server 8092<br/>documenti e RAG]
ACT[actions_server 8093<br/>azioni con conferma]
end
subgraph MOD[Modelli GGUF su CPU]
M1[Qwen3-1.7B default]
M2[Qwen3-4B]
M3[Qwen2.5-Omni-3B]
end
WS[(Workspace ~/Banana/workspace)]
end
UI -->|API OpenAI| SRV
BOT -->|API OpenAI| SRV
UI --> SEARCH
UI --> STORE
UI -->|dopo il tuo Consenti| ACT
SRV --> M1
SRV --> M2
SRV --> M3
ACT --> WS
| Componente | Pagina |
|---|---|
| Interfaccia web | Interfaccia |
| Ricerca, documenti, memoria | Uso di Banana |
| Azioni sul computer | Azioni sul computer |
| Bot Discord | Discord |
| Modelli e parametri del server | Modelli e prestazioni |
- Risponde alle domande in locale: nessun dato lascia il computer e non serve internet (dopo il download dei modelli). Solo se attivi il pulsante Web, la tua domanda viene inviata a DuckDuckGo per la ricerca.
- Parla italiano e si esprime al femminile (è "Banana").
- Tre modelli selezionabili dalla UI: Qwen3-4B (più capace), Qwen3-1.7B (più veloce) e Qwen2.5-Omni-3B (multimodale).
- Immagini e audio in ingresso con Qwen2.5-Omni-3B.
- Documenti locali (RAG): carichi PDF e file di testo e Banana risponde citando file e pagina (pulsante Doc).
- Ricerca web opzionale (pulsante Web): cerca online e risponde citando le fonti, senza chiavi API.
- Memoria persistente: ricorda da sola i fatti personali duraturi che le dici e li usa nelle chat successive.
- Ragionamento attivabile dal menu per tutti i modelli (spento di default per risposte più rapide).
-
Avvio con un clic su macOS:
Banana.app. - Due modi d'uso:
-
Interfaccia web su
http://127.0.0.1:8080, con cronologia delle conversazioni, impostazioni, selettore modello e tema personalizzato blu-oro. -
Chat da terminale, con il programma
./llmoppure conscripts/run_qwen.sh.
-
Interfaccia web su
engine/main.cpp ──────────────► libllama / libggml ◄──── llama-server ◄──── browser / Banana.app
(chat da terminale) (motore llama.cpp) (API + Web UI) 127.0.0.1:8080
│
▼
modelli .gguf (Qwen3, Qwen2.5-Omni)
-
engine/main.cpp: programma C++ che si collega direttamente alle librerielibllamaelibggml. Carica il modello, applica il chat template, genera le risposte token per token e le mostra in streaming. -
llama.cpp/: copia completa del progetto llama.cpp inclusa nella repo. Fornisce il motore di inferenza ellama-server. -
llama-server: server locale con API compatibile OpenAI (/v1/chat/completions) e interfaccia web incorporata. Parte in router mode: legge tutti i.ggufpresenti nella cartella (e nelle sottocartelle con modello +mmproj) e carica il modello scelto quando serve. Ne tiene in memoria uno alla volta. -
Interfaccia web: la UI di llama.cpp (SvelteKit, in
llama.cpp/tools/ui/), personalizzata: tema insrc/app.css, sfondostatic/bg-ship.jpg, testi in italiano, nome Banana. I file della UI vengono incorporati nel binariollama-serverin fase di compilazione. -
Memoria (
llama.cpp/tools/ui/src/lib/utils/banana-memory.ts): i fatti sono salvati nellocalStoragedel browser e aggiunti al system prompt di ogni richiesta, insieme all'identità di Banana (italiano, femminile). Dopo ogni risposta, se il messaggio sembra contenere informazioni personali, il modello stesso estrae i fatti duraturi da salvare. -
search_server.py: servizio locale (127.0.0.1:8091) che interroga DuckDuckGo (HTML, viacurl) e restituisce i primi risultati; con/fetch?url=scarica una pagina e ne estrae il testo (per riassumi , solo indirizzi pubblici). Avviato e fermato insieme al server. -
store_server.py: servizio locale (127.0.0.1:8092) che salva memoria, progetti e documenti anche in~/Banana/data/(memory.json,projects.json,docs.json); avviato e fermato insieme al server, accetta solo richieste dalla UI locale. -
Documenti (RAG) (
llama.cpp/tools/ui/src/lib/utils/banana-docs.svelte.ts): i file caricati vengono spezzati in estratti da ~700 caratteri e salvati nel browser (IndexedDB). A ogni domanda una ricerca BM25 per parole chiave, senza modelli di embedding, sceglie gli estratti più pertinenti, che vengono aggiunti al prompt. -
Banana.app: generata dascripts/make_app.sh. Avvia il server, apre una finestra Chrome dedicata e spegne il server quando la finestra viene chiusa. -
engine/src/eengine/include/: tokenizer, matrici e transformer scritti da zero (progetto iniziale). Non vengono più usati per l'inferenza. -
web/index.html: prima pagina web sperimentale, non usata dal server attuale.