Skip to content

Cocozza-simone/rag-turboquant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ”¬ TurboQuant Ollama RAG System

Sistema completo per Retrieval-Augmented Generation (RAG) che permette di interrogare il paper accademico TurboQuant usando modelli LLM locali tramite Ollama.

πŸ“‹ Panoramica

Questo sistema ti permette di:

  • Indicizzare il paper TurboQuant (o qualsiasi PDF)
  • Fare domande in linguaggio naturale sul contenuto
  • Ottenere risposte basate sul contesto del documento
  • Chat interattiva per esplorazione approfondita

Cos'Γ¨ TurboQuant?

TurboQuant Γ¨ un metodo di quantizzazione vettoriale che comprime vettori ad alta dimensionalitΓ  minimizzando la distorsione, con applicazioni in:

  • Quantizzazione KV cache in Large Language Models
  • Nearest neighbor search efficiente
  • Compressione di embeddings

πŸš€ Installazione Rapida

Prerequisiti

  • Python 3.8+
  • Ollama installato e in esecuzione

Installazione Automatica

cd turboquant_ollama_system
chmod +x install.sh
./install.sh

Installazione Manuale

# 1. Crea ambiente virtuale
python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 2. Installa dipendenze
pip install -r requirements.txt

# 3. Scarica modelli Ollama
ollama pull nomic-embed-text
ollama pull llama3.2

πŸ“– Utilizzo

1. Indicizza il Documento

python main.py index /mnt/okcomputer/upload/2504.19874v1.pdf

Opzioni avanzate:

python main.py index paper.pdf \
    --chunk-size 1000 \
    --chunk-overlap 200 \
    --embedding-model mxbai-embed-large

2. Fai una Domanda

python main.py query "Cos'Γ¨ TurboQuant?"

Con opzioni:

python main.py query "Quali sono i vantaggi rispetto alla Product Quantization?" \
    --top-k 5 \
    --temperature 0.3 \
    --llm-model mistral

3. Chat Interattiva

python main.py chat

Esempio di sessione:

❓ Domanda: Spiega l'Algorithm 1

πŸ’‘ Risposta (llama3.2, 3.45s):
L'Algorithm 1 descrive TurboQuant ottimizzato per MSE...

πŸ“š Fonti:
  1. Pagina 10 (Methods) - Score: 0.892
  2. Pagina 11 (Methods) - Score: 0.845

4. Info Sistema

python main.py info

πŸ—οΈ Architettura

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      USER QUERY                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚   EMBEDDING  │───▢│    FAISS     │───▢│   RETRIEVAL  β”‚  β”‚
β”‚  β”‚   (Ollama)   β”‚    β”‚  VECTOR DB   β”‚    β”‚   (Top-K)    β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚   CONTEXT    │───▢│     LLM      │───▢│   RESPONSE   β”‚  β”‚
β”‚  β”‚   BUILDER    β”‚    β”‚   (Ollama)   β”‚    β”‚   (RAG)      β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“ Struttura del Progetto

turboquant_ollama_system/
β”œβ”€β”€ main.py                 # CLI principale
β”œβ”€β”€ pdf_extractor.py        # Estrazione testo da PDF
β”œβ”€β”€ embeddings.py           # Gestione embeddings
β”œβ”€β”€ vector_store.py         # Vector database (FAISS)
β”œβ”€β”€ rag_engine.py           # Motore RAG
β”œβ”€β”€ requirements.txt        # Dipendenze
β”œβ”€β”€ install.sh              # Script installazione
β”œβ”€β”€ setup.py                # Setup package
β”œβ”€β”€ data/                   # Dati (creato automaticamente)
β”œβ”€β”€ vector_store/           # Indice FAISS (creato automaticamente)
└── cache/                  # Cache embeddings (creato automaticamente)

βš™οΈ Configurazione

Modelli Supportati

Embeddings (Ollama):

  • nomic-embed-text (default, 768 dim)
  • mxbai-embed-large (1024 dim, migliore qualitΓ )
  • snowflake-arctic-embed (1024 dim)

LLM (Ollama):

  • llama3.2 (default, 3B params, veloce)
  • mistral (7B params, migliore ragionamento)
  • llama3.1 (8B params)
  • phi3 (Microsoft, 3.8B params)

Parametri Chunking

Parametro Default Descrizione
chunk_size 800 Caratteri per chunk
chunk_overlap 150 Sovrapposizione tra chunk
top_k 5 Numero di fonti recuperate
temperature 0.3 CreativitΓ  LLM (0-1)

πŸ”§ API Python

from rag_engine import OllamaRAG

# Inizializza
rag = OllamaRAG(
    embedding_backend="ollama",
    embedding_model="nomic-embed-text",
    llm_model="llama3.2"
)

# Indicizza
rag.index_document("paper.pdf", chunk_size=800)

# Query
response = rag.query(
    "Quali sono i teoremi principali?",
    k=5,
    temperature=0.3
)

print(response.answer)
print(f"Fonti: {len(response.sources)}")

πŸ“Š Prestazioni

Su NVIDIA A100 con llama3.2:

  • Indicizzazione: ~2 minuti per 15 pagine
  • Query: ~2-4 secondi (incluso retrieval + generation)
  • Memoria: ~500MB RAM per indice

πŸ› οΈ Troubleshooting

Ollama non risponde

# Verifica che Ollama sia in esecuzione
curl http://localhost:11434/api/tags

# Avvia Ollama
ollama serve

Modello non trovato

# Scarica il modello
ollama pull nomic-embed-text
ollama pull llama3.2

Errore di memoria

# Usa modelli piΓΉ piccoli
python main.py query "..." --llm-model phi3

πŸ“š Esempi di Query

# Concetti base
python main.py query "Cos'Γ¨ la quantizzazione vettoriale?"

# Algoritmi
python main.py query "Spiega l'Algorithm 2 step by step"

# Teoremi
python main.py query "Enuncia il Theorem 1 e spiega la dimostrazione"

# Confronti
python main.py query "Confronta TurboQuant con Product Quantization"

# Applicazioni
python main.py query "Come si applica TurboQuant alla KV cache?"

# Metriche
python main.py query "Quali sono i bound di distorsione per MSE?"

🀝 Contribuire

  1. Fork del repository
  2. Crea un branch (git checkout -b feature/xyz)
  3. Commit (git commit -am 'Add feature')
  4. Push (git push origin feature/xyz)
  5. Apri una Pull Request

πŸ“ License

MIT License - Vedi LICENSE per dettagli.

πŸ™ Riconoscimenti


Creato con ❀️ per la ricerca e l'apprendimento

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors