Initial commit: RAGGER - Sistema RAG per associazione di volontariato
This commit is contained in:
commit
0204feb8bf
36 files changed
+4116
No files matched your search
+246
@@ -0,0 +1,246 @@
|
||||
# RAGGER - Changelog Sessione 22/02/2026
|
||||
|
||||
## Obiettivo Iniziale
|
||||
|
||||
Implementare un sistema di debug e test efficace per il progetto RAGGER, un sistema RAG (Retrieval-Augmented Generation) per un'associazione di volontariato.
|
||||
|
||||
---
|
||||
|
||||
## 1. Sistema di Debug
|
||||
|
||||
### 1.1 Creazione `logger.py`
|
||||
|
||||
Sistema di logging verboso con:
|
||||
- Output colorato su console
|
||||
- Log su file con rotazione (5MB, 3 files)
|
||||
- File: `logs/ragger.log`
|
||||
- Livello: DEBUG
|
||||
|
||||
### 1.2 Riscrittura `debug.py`
|
||||
|
||||
Utility completa con menu interattivo:
|
||||
|
||||
```
|
||||
MENU
|
||||
------------------------------
|
||||
1. Health Check
|
||||
2. Show Status
|
||||
3. Show Logs
|
||||
------------------------------
|
||||
4. Test Embedding
|
||||
5. Test Generation
|
||||
6. Test Qdrant
|
||||
7. Ingest testdoc/
|
||||
------------------------------
|
||||
8. Reset Database
|
||||
9. Reset Uploads
|
||||
0. Full Reset (DESTROY ALL)
|
||||
------------------------------
|
||||
```
|
||||
|
||||
**Comandi CLI disponibili:**
|
||||
```bash
|
||||
python debug.py health # Health check 7 componenti
|
||||
python debug.py reset-db # Reset database (conferma)
|
||||
python debug.py reset-all # Reset completo (DESTROY)
|
||||
python debug.py ingest-testdoc # Ingest documenti da testdoc/
|
||||
python debug.py test-embed # Test embedding
|
||||
python debug.py test-gen # Test generazione
|
||||
python debug.py test-qdrant # Test Qdrant
|
||||
```
|
||||
|
||||
### 1.3 Health Check
|
||||
|
||||
Verifica 7 componenti:
|
||||
1. Tesseract OCR + Lingue (ita, eng)
|
||||
2. Poppler (pdf2image)
|
||||
3. Connessione Ollama
|
||||
4. Modello Embedding (nomic-embed-text)
|
||||
5. Qdrant Vector DB
|
||||
6. Uploads Directory
|
||||
7. Logs Directory
|
||||
|
||||
---
|
||||
|
||||
## 2. Logging Integrato
|
||||
|
||||
### 2.1 Moduli aggiornati con logging
|
||||
|
||||
| File | Modifica |
|
||||
|------|----------|
|
||||
| `ollama_client.py` | Logging richieste HTTP, embedding, generazione |
|
||||
| `vectorstore.py` | Logging operazioni CRUD, search |
|
||||
| `core.py` | Logging ingest, query, generazione |
|
||||
| `ocr.py` | Logging estrazione OCR |
|
||||
| `chunker.py` | Logging chunking |
|
||||
| `app.py` | Health check all'avvio |
|
||||
|
||||
### 2.2 Configurazione
|
||||
|
||||
Aggiunto in `config.py`:
|
||||
```python
|
||||
LOG_LEVEL: str = "DEBUG"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Supporto Multi-Formato Documenti
|
||||
|
||||
### 3.1 Nuovo `document_processor.py`
|
||||
|
||||
Sostituisce `ocr.py` con supporto per:
|
||||
|
||||
| Estensione | Tipo | Metodo |
|
||||
|------------|------|--------|
|
||||
| `.pdf` | PDF | OCR (Tesseract) |
|
||||
| `.png`, `.jpg`, `.jpeg`, `.tiff`, `.bmp` | Immagini | OCR |
|
||||
| `.xlsx`, `.xls` | Excel | openpyxl |
|
||||
| `.docx`, `.doc` | Word | python-docx |
|
||||
| `.pptx`, `.ppt` | PowerPoint | python-pptx |
|
||||
| `.txt`, `.md` | Testo | Lettura diretta |
|
||||
| `.csv` | CSV | Lettura diretta |
|
||||
|
||||
### 3.2 Dipendenze aggiunte
|
||||
|
||||
```
|
||||
openpyxl # Excel
|
||||
python-docx # Word
|
||||
python-pptx # PowerPoint
|
||||
```
|
||||
|
||||
### 3.3 Aggiornamenti correlati
|
||||
|
||||
- `chunker.py`: Aggiunto campo `sheet` per Excel
|
||||
- `vectorstore.py`: Aggiunto `sheet` nel payload
|
||||
- `app.py`: Aggiornato file_uploader per tutti i formati
|
||||
- `core.py`: Import aggiornato a `document_processor`
|
||||
|
||||
---
|
||||
|
||||
## 4. Configurazione
|
||||
|
||||
### 4.1 File `.env` aggiornato
|
||||
|
||||
```env
|
||||
LLM_PROVIDER=ollama
|
||||
OLLAMA_HOST=https://ollama.solarpi.net
|
||||
OLLAMA_MODEL=gemma2:9b
|
||||
OLLAMA_EMBED_MODEL=pedrovillalobos/nomic-embed-text-no-gpu
|
||||
LOG_LEVEL=DEBUG
|
||||
```
|
||||
|
||||
### 4.2 Timeout aumentato
|
||||
|
||||
`ollama_client.py`: Timeout da 120s a 300s per generazione lenta su CPU.
|
||||
|
||||
---
|
||||
|
||||
## 5. Test Effettuati
|
||||
|
||||
### 5.1 Health Check
|
||||
|
||||
```
|
||||
[1/7] Tesseract OCR.............. ✅ v5.5.0
|
||||
[2/7] Tesseract Languages........ ✅ ita, eng
|
||||
[3/7] Poppler (pdf2image)........ ✅
|
||||
[4/7] Ollama Connection.......... ✅ 0.3s
|
||||
[5/7] Embedding Model............ ✅ 768 dims, 2.2s
|
||||
[6/7] Qdrant..................... ✅ 11 chunks
|
||||
[7/7] Uploads Directory.......... ✅ 1 file
|
||||
|
||||
STATUS: 7/7 OK
|
||||
```
|
||||
|
||||
### 5.2 Ingest Documenti
|
||||
|
||||
Documenti nella cartella `testdoc/`:
|
||||
- `Nuova Modalità di Iscrizione UILDM Gorizia.pdf` → 2 chunks
|
||||
- `Soci UILDM.xlsx` → 4 chunks
|
||||
- `UILDM GORIZIA 2026 Brochure_2.pdf` → 2 chunks
|
||||
- `progetto_insieme_senza_confini.pdf` → 3 chunks
|
||||
|
||||
**Totale: 11 chunks**
|
||||
|
||||
### 5.3 Search Test
|
||||
|
||||
Query: "come iscriversi alla UILDM"
|
||||
- Risultato #1: score 0.70 (documento corretto)
|
||||
|
||||
---
|
||||
|
||||
## 6. Struttura Progetto Finale
|
||||
|
||||
```
|
||||
ragger/
|
||||
├── app.py # UI Streamlit
|
||||
├── core.py # Logica RAG
|
||||
├── document_processor.py # Estrazione testo multi-formato
|
||||
├── ocr.py # Tesseract wrapper (deprecato)
|
||||
├── chunker.py # Text chunking
|
||||
├── ollama_client.py # Client Ollama
|
||||
├── vectorstore.py # Qdrant
|
||||
├── config.py # Settings
|
||||
├── logger.py # Logging system
|
||||
├── debug.py # Debug utility
|
||||
├── requirements.txt # Dipendenze
|
||||
├── .env # Configurazione attiva
|
||||
├── .env.example # Template
|
||||
├── data/
|
||||
│ ├── uploads/ # Documenti caricati
|
||||
│ └── qdrant/ # Vector DB
|
||||
├── logs/
|
||||
│ └── ragger.log # Log file
|
||||
├── testdoc/ # Documenti di test
|
||||
└── docs/
|
||||
└── DESIGN.md # Documento di design
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. Comandi Rapidi
|
||||
|
||||
```bash
|
||||
# Attiva ambiente
|
||||
source venv/bin/activate
|
||||
|
||||
# Health check
|
||||
python debug.py health
|
||||
|
||||
# Ingest documenti test
|
||||
python debug.py ingest-testdoc
|
||||
|
||||
# Reset database
|
||||
python debug.py reset-db
|
||||
|
||||
# Avvia app
|
||||
streamlit run app.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Note Tecniche
|
||||
|
||||
### 8.1 Problemi noti
|
||||
|
||||
- **Generazione lenta**: gemma2:9b su CPU remoto richiede ~2+ minuti per risposta
|
||||
- **Qdrant cleanup warning**: Warning innocuo alla chiusura di Python
|
||||
|
||||
### 8.2 Architettura
|
||||
|
||||
- **Monolitica**: Single app per singolo utente
|
||||
- **Ollama remoto**: Server esistente a ollama.solarpi.net
|
||||
- **Qdrant locale**: Database vettoriale in `data/qdrant/`
|
||||
- **Tesseract locale**: OCR on-premise
|
||||
|
||||
---
|
||||
|
||||
## 9. Prossimi Passi
|
||||
|
||||
1. Testare l'app Streamlit con `streamlit run app.py`
|
||||
2. Valutare modello più veloce per generazione (es. llama3.2)
|
||||
3. Implementare agentic layer (query planning, multi-pass retrieval)
|
||||
4. Aggiungere UI per visualizzare documenti indicizzati
|
||||
|
||||
---
|
||||
|
||||
*Sessione completata: 22/02/2026*
|
||||
Reference in new issue
Block a user