# 🧠 RAG Demo PostgreSQL + Chroma

See projekt on lihtne Retrieval-Augmented Generation (RAG) süsteem, mis kasutab:

- PostgreSQL + SQLAlchemy artiklite haldamiseks
- Chroma vektorindeksit tekstilõikudele
- LLM-i (nt OpenAI või lokaalne .gguf mudel Ollama/Llama.cpp jaoks) küsimustele vastamiseks

## 🔧 Nõuded

- Python 3.10+
- PostgreSQL (artiklite andmebaas)
- Chroma (faasipõhine vektorindeks)
- OpenAI API võti (kui kasutatakse `gpt-4` või `gpt-3.5-turbo`)
- `.env` fail, kus on vähemalt:

```env
DATABASE_URL=postgresql+psycopg2://kasutaja:parool@host/andmebaas
OPENAI_API_KEY=... # vajadusel
```

## 🗃️ Andmebaasi struktuur

Tabel `articles` sisaldab:
- `id` (int)
- `doi` (tekst, unikaalne)
- `title`, `authors`, `summary`, `summary_et`, `journal`, `pdf_url`, `text`
- jpm.

## 📥 DOI-de importimine

CSV failist saab importida DOI-sid:

```bash
python -m cli.import_dois_from_csv --csv import/myfile.csv
```

## 📄 Artiklite laadimine

Lae artikleid CrossRef kaudu (sh PDF ja teksti eraldamine):

```bash
python -m cli.load_articles
```

Üksiku DOI laadimiseks:

```bash
python -m cli.load_article_by_doi --doi 10.1234/foobar
```

## 📚 Indekseerimine

Tekstikatkendid artiklitest saab vektorindeksisse salvestada:

```bash
python -m cli.build_index
```

## 💬 Küsimustele vastamine

Eeldab olemasolevat Chroma indeksit ja LLM mudelit (.gguf või OpenAI):

```bash
python -m cli.rag_cli --question "Mis on tehisintellekt?" --model models/mymodel.gguf
```

## 🌍 Tõlkimine

Artiklite kokkuvõtete tõlkimine eesti keelde:

```bash
python -m cli.translate_summaries
```

## 🧪 Testimine

Testide käivitamiseks:

```bash
pytest
```

Ühe testi käivitamine:

```bash
pytest tests/test_load_article_by_doi.py
```

Soovitatav on kasutada virtuaalkeskkonda (näiteks `venv` või `conda`) ja installida sõltuvused:

```bash
pip install -r requirements.txt
```

---

🎯 Projekt on mõeldud arendajatele, kes soovivad katsetada RAG-arhitektuuri kasutades PostgreSQL-i ja lokaalseid LLM-e.
