247 lines
5.9 KiB
Markdown
247 lines
5.9 KiB
Markdown
# 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*
|