--- license: openrail base_model: sasitsar/emma-4 base_model_relation: quantized library_name: gguf pipeline_tag: text-generation language: - it authors: - Egomnia S.p.A. tags: - gguf - llama.cpp - italian - gpt - text-generation - enterprise - lightweight - swiGLU - gqa datasets: - custom-mixture --- # 🇮🇹 Emma-4 (GGUF) ## Premessa Questo repository contiene una conversione **non ufficiale** in formato GGUF di Emma-4, realizzata con llama.cpp. Il modello originale **Emma-4** è stato sviluppato da **Egomnia S.p.A.**. Questo repository non è affiliato a Egomnia S.p.A. e non modifica l'autorialità del modello originale. ### Provenienza dei pesi Questi **non sono i file originali pubblicati da Egomnia**: un repository ufficiale `egomnia/emma-4` non è disponibile pubblicamente su Hugging Face. I pesi sono stati recuperati da [`sasitsar/emma-4`](https://huggingface.co/sasitsar/emma-4), un reupload/archivio pubblico del checkpoint ONNX, e da lì convertiti in GGUF. Per questo motivo i metadata di questo repository indicano `sasitsar/emma-4` come modello base. L'autorialità e i diritti sul modello restano attribuiti a Egomnia S.p.A. secondo la licenza e il model card originali. ## File disponibili Il file `emma-4-F32.gguf` è la conversione GGUF in F32 del modello originale. Le altre varianti sono state ricavate da questo file con `llama-quantize`, usando i tipi di quantizzazione supportati da llama.cpp. Sono disponibili: - `emma-4-F32.gguf` - `emma-4-F16.gguf` - `emma-4-BF16.gguf` - `emma-4-Q8_0.gguf` - `emma-4-Q6_K.gguf` - `emma-4-Q5_K_M.gguf` - `emma-4-Q5_K_S.gguf` - `emma-4-Q5_1.gguf` - `emma-4-Q5_0.gguf` - `emma-4-Q4_K_M.gguf` - `emma-4-Q4_K_S.gguf` - `emma-4-Q4_1.gguf` - `emma-4-Q4_0.gguf` - `emma-4-IQ4_NL.gguf` - `emma-4-IQ4_XS.gguf` - `emma-4-Q3_K_L.gguf` - `emma-4-Q3_K_M.gguf` - `emma-4-Q3_K_S.gguf` - `emma-4-IQ3_M.gguf` - `emma-4-IQ3_S.gguf` - `emma-4-Q2_K.gguf` - `emma-4-TQ2_0.gguf` - `emma-4-TQ1_0.gguf` - `emma-4-MXFP4_MOE.gguf` Le quantizzazioni sono state generate a partire da `emma-4-F32.gguf` e sono riproducibili localmente con llama.cpp. Il file `emma-4-F32.gguf` è inoltre stato verificato rispetto al checkpoint ONNX originale: i tensori coincidono bit-per-bit (a meno della trasposizione e della permutazione RoPE) e la generazione greedy risulta identica a quella del runtime ONNX. ## Esecuzione con llama.cpp ### Chat interattiva ```bash llama-cli -m emma-4-F32.gguf --jinja -ngl 99 -c 2048 -cnv ``` ### Prompt diretto ```bash llama-cli -m emma-4-F32.gguf --jinja -ngl 99 -c 2048 -st -p "Qual è la capitale d'Italia?" ``` `--jinja` applica il chat template incorporato nel GGUF. `-ngl 99` carica i layer in GPU, se disponibile; omettilo per usare solo la CPU. `-c 2048` imposta la context length massima del modello. ## Adattamenti rispetto al checkpoint ONNX Per l'architettura `llama` di llama.cpp sono stati applicati due adattamenti: - RoPE: le proiezioni Q e K sono permutate dal layout half-split (GPT-NeoX) al layout interleaved (GPT-J), come per i modelli LLaMA. - Chat template: il formato di istruzione Alpaca italiano usato nell'SFT è incorporato nel file (`tokenizer.chat_template`). ## Formato del prompt ```text ### Istruzione: ### Risposta: ``` Con `--jinja` il formato viene applicato automaticamente. Per il completamento grezzo, usa lo stesso formato su una sola riga. ## Parametri di campionamento I repository ufficiali non specificano parametri di campionamento per l'inferenza, e nemmeno il checkpoint ONNX li contiene: un modello ONNX espone soltanto i logit, mentre `temperature`, `top-p` e `top-k` vengono applicati a valle dal codice di inferenza, non dal modello stesso. I valori seguenti sono quindi valori di riferimento generici, non prescritti da Egomnia, scelti per un compromesso ragionevole tra coerenza e varietà dell'output, e possono essere adattati liberamente al caso d'uso: - `temperature`: 0.7 - `top-p`: 0.9 - `top-k`: 40 I default di llama.cpp sono diversi, quindi per usare questi valori conviene impostarli manualmente, incluso `--min-p 0`. Il `--repeat-penalty` non va invece impostato: llama.cpp lo lascia già a `1.0`, cioè nessuna penalità di ripetizione, coerentemente con un percorso di inferenza ONNX che non applica alcuna penalità. ```bash llama-cli -m emma-4-F32.gguf --jinja -c 2048 -ngl 99 -cnv \ --temp 0.7 --top-k 40 --top-p 0.9 --min-p 0 ``` Server OpenAI-compatibile: ```bash llama-server -m emma-4-F32.gguf --jinja -c 2048 -ngl 99 \ --temp 0.7 --top-k 40 --top-p 0.9 --min-p 0 ``` Per un output deterministico e riproducibile usa `--temp 0` (greedy). ## Nota sul tokenizer Il tokenizer SentencePiece originale normalizza i ritorni a capo (`nmt_nfkc`, `remove_extra_whitespaces`), mentre il tokenizer di llama.cpp non lo fa nello stesso modo. Per evitare differenze nella tokenizzazione usa `--jinja`, oppure, nei prompt grezzi, spazi singoli al posto dei caratteri di a capo. ## Nota sul multi-turno Emma-4 è stato addestrato (SFT) principalmente su singoli turni istruzione/risposta. È quindi più affidabile a turno singolo. In conversazioni a più turni la qualità può calare e l'output dipende da come viene ricostruita la cronologia del contesto. Per risultati più fedeli conviene inviare una istruzione completa per ogni richiesta. --- ## Informazioni sul modello originale Le informazioni seguenti derivano dal model card originale di Emma-4 (Egomnia S.p.A.), recuperato da [`sasitsar/emma-4`](https://huggingface.co/sasitsar/emma-4). È stato rimosso unicamente l'esempio di esecuzione con ONNX Runtime; il resto è lasciato invariato. ## Overview **Emma-4** è un Large Language Model decoder-only sperimentale sviluppato da **Egomnia S.p.A.**, ottimizzato per lingua italiana e progettato per applicazioni leggere e piccole automazioni. Sito ufficiale: https://emma.egomnia.com Il modello è progettato per essere: - efficiente - veloce in inference - utilizzabile su infrastrutture leggere o locali - adatto a micro-imprese e workflow automatizzati Non è progettato per ragionamento avanzato o uso critico. ## Architettura - Tipo: GPT decoder-only - Transformer blocks: 24 - Hidden size: 1.024 - Attention heads: 16 query + 4 KV (GQA 4:1) - Head dimension: 64 - Feed-forward dimension: 2.752 (SwiGLU, ff_mult 8/3) - Activation function: SwiGLU - Normalization: RMSNorm - Positional encoding: RoPE (theta 10.000) - Dropout: 0.0 - Embeddings: tied (token embedding = lm_head) ## Contesto e vocabolario - Context length: 2.048 token - Vocabulary size: 50.000 token - Tokenizer: SentencePiece BPE con byte fallback ## Dataset di training - Enciclopedico: 43,55% - Codice: 23,65% - Generalista: 20,71% - Libri: 8,53% - Colloquiale: 2,03% - Politico: 1,54% ## Alignment - Supervised Fine-Tuning (SFT) - Direct Preference Optimization (DPO): disabilitato ## Export e ottimizzazione - Framework originale: PyTorch - Export: ONNX - Opset: 18 - Quantizzazione: INT8 - Peso modello ONNX: 1,48 GB - Peso quantizzato INT8: ~55 MB ## Intended Use Emma-4 è progettato per: - NLP generalista in italiano ## Utilizzo non consigliato - ragionamento complesso multi-step - applicazioni medicali, legali o finanziarie critiche - sistemi ad alta affidabilità - analisi scientifica avanzata ## Focus prestazionale Il modello è ottimizzato per: - inference veloce - riduzione dei costi computazionali - utilizzo enterprise leggero - deployment su CPU o ambienti limitati ## Limitazioni - capacità limitata su reasoning complesso - possibili allucinazioni - sensibilità a prompt lunghi o ambigui - contesto limitato a 2.048 token ## Licenza Distribuito sotto licenza **OpenRAIL-M**, con eventuali vincoli derivati dalle licenze dei dataset utilizzati. Questa licenza consente l’uso, la modifica e la distribuzione del modello anche in ambito commerciale, imponendo tuttavia restrizioni sull’utilizzo in scenari potenzialmente dannosi, illegali o non etici, secondo i principi di Responsible AI e nel rispetto delle eventuali restrizioni derivanti dalle licenze dei dataset utilizzati. Si richiede esprezzamente di citare **Egomnia S.p.A.** come autore del modello in caso di utilizzo di quest'ultimo per prodotti, servizi, pubblicazioni o documentazione tecnica. ## Autore Egomnia S.p.A. ## Sito ufficiale https://emma.egomnia.com ## Manifesto di Emma — LLM italiano per la sovranità tecnologica Per la sovranità tecnologica italiana Noi crediamo che l’intelligenza artificiale non sia soltanto una tecnologia, ma un’infrastruttura critica per il futuro economico, culturale e democratico di una nazione. Per troppo tempo, i modelli linguistici che plasmano informazione, lavoro e conoscenza sono stati sviluppati altrove, secondo logiche, valori e priorità non sempre allineate con il contesto italiano ed europeo. I nostri modelli nascono per cambiare questo paradigma. Non è solo il lancio di un nuovo modello, ma una presa di posizione chiara: rilanciare un ecosistema italiano dell’intelligenza artificiale, capace di essere autonomo, competitivo e coerente con le esigenze del nostro Paese. La famiglia dei LLM "Emma" è anche il risultato di un lavoro costruito nel tempo. Il modello è stato addestrato utilizzando, in parte, dataset proprietari realizzati e custoditi per anni, mai ceduti a terzi. Un patrimonio informativo unico, che siamo convinti possa diventare nel tempo il nostro vero elemento distintivo rispetto ai grandi attori globali. Oggi non abbiamo la presunzione di competere con i nomi che guidano il settore: Emma rappresenta un primo passo, concreto ma ancora iniziale, all'interno di un percorso di crescita e innovazione che intendiamo sviluppare negli anni a venire. Questa non è solo innovazione tecnologica. È una scelta di indipendenza. È una visione industriale. È il nostro contributo. Dedicato a mia figlia, Emma. Matteo Achilli Fondatore di Egomnia ## Note Italian Light GPT: Emma-4 è un modello leggero, valido per piccoli chatbot aziendali e per automazioni leggere di supporto ai processi per micro imprese italiane.