
## 🧩 **RAG (Retrieval-Augmented Generation) voog Weaviate + LLM + Embedding**

````
📄 PDF-d / artiklid
│
│  ① Ekstraktime teksti (PyMuPDF, PDFPlumber vms)
│
▼
🔤 Tekstilõigud (chunks)
│  Näiteks 500–800 tähemärki iga lõigu kohta
│
│  ② SentenceTransformer -> loob embeddingud
│     (nt nomic-ai/nomic-embed-text-v1.5)
│
▼
🧮 Embeddingud = vektorid  [ -0.13, 0.45, ..., 0.88 ]
│
│  ③ Salvestatakse Weaviate’i:
│
│   class: "Article"
│   properties:
│     • content: "textilõik"
│     • file_name: "2012.08388v2.pdf"
│     • source_url: "https://arxiv.org/abs/2012.08388"
│     • page_start: 0
│     • page_end: 800
│     • _vector: [-0.13, 0.45, ..., 0.88]
│
▼
🗄️ **Weaviate** = vektoriandmebaas
│  - Hoiab kõik lõigud ja nende vektoreid
│  - Kasutab HNSW indeksit semantiliste otsingute jaoks
│
│  ④ Kui kasutaja küsib midagi:
│     "Mis on artiklite põhiteema?"
│
│  ⑤ Embedder loob ka küsimusele vektori
│
▼
🔍 **Weaviate otsib lähimad `_vector`-id**
│  - arvutab kosinus-sarnasuse
│  - tagastab 5–10 kõige sarnasemat `content` lõiku
│
▼
🧠 **LLM (nt Mistral, Llama, GPT-4, jms)**
│  ⑥ saab päringu + konteksti:
│     ```
│     KONTEKST:
│     [Lõik 1: "...liiklusohutuse modelleerimine..."]
│     [Lõik 2: "...õnnetuste raskusaste Poissoni regressiooniga..."]
│
│     KÜSIMUS:
│     Mis on artiklite põhiteema?
│     ```
│
│  ⑦ LLM genereerib vastuse:
│     → “Kõik artiklid käsitlevad liiklusõnnetuste raskusastme modelleerimist...”
│
▼
✅ Vastus kasutajale
````
---

## 🧠 Olulisemad seosed

| Etapp                   | Roll                   | Kus toimub                                    |
| ----------------------- | ---------------------- | --------------------------------------------- |
| ① PDF → tekst           | Ekstraktsioon          | Python (`PyMuPDF`, `pdfminer`)                |
| ② Tekst → vektor        | Embedding              | `SentenceTransformer`                         |
| ③ Salvestus             | `_vector` + metaandmed | Weaviate                                      |
| ④ Päring → embedding    | Embedding              | Sama mudel (`nomic-ai/nomic-embed-text-v1.5`) |
| ⑤ Vektoriotsing         | Semantiline sarnasus   | Weaviate (HNSW indeks)                        |
| ⑥ Konteksti liitmine    | Kontekstualiseerimine  | Python / LLM wrapper                          |
| ⑦ Vastuse genereerimine | Looduskeelne väljund   | LLM (nt Mistral)                              |
