# Kendi AI Sunucuna Geçiş Planı

## Genel Mimari

```
Kullanıcı → Plesk Sunucu (Windows) → Kendi AI Sunucun (Ubuntu + GPU)
                ↓                              ↓
          Laravel Backend               Ollama API (11434)
          (mevcut sistem)               - LLM (astroloji modelin)
          (sadece endpoint değişir)     - Embedding modeli
                                        - pgvector (RAG)
```

---

## Adım 1: Bilgisayarı Topla

**Kesin liste — bunu al:**

| Parça | Model | Sebebi |
|-------|-------|--------|
| GPU | **RTX 3090 24GB** (2. el) | 24GB VRAM = Llama 3 8B FP16 + embedding modeli aynı anda çalışır. 4090'a para vermeye gerek yok. |
| CPU | **Ryzen 7 7700** | Embedding hesaplama, PDF işleme, pgvector sorguları için |
| Anakart | B650 (MSI/Gigabyte) | DDR5, PCIe 4.0, stabil |
| RAM | **64 GB DDR5** (2x32) | 32GB yeterli ama embedding DB büyüdükçe 64GB rahatlatır |
| SSD | **2 TB NVMe** (Samsung 980 Pro) | Modeller, embedding DB, PDF'ler hep burada |
| PSU | **850W 80+ Gold** (Corsair RM850e) | 3090 tek başına 350W çeker |
| Kasa | **4U Rackmount** (Silverstone RM44) | Veri merkezine rack olarak takılır |

**İşletim sistemi:** Ubuntu Server 24.04 LTS

---

## Adım 2: PDF'lerden Veri Seti Oluştur

Sisteminizin şu an OpenAI ile çalışan prompt mimarisi raporda Section 6'da anlatılıyor. Bu prompt'ları eğitim verisine dönüştüreceğiz.

**Yöntem:**

```bash
# 1. PDF'leri düz metne çevir
pip install pymupdf

# 2. Metinleri 1000'er kelimelik parçalara böl
# 3. HER PARÇA için şu soru tiplerini üret:
#    - "Bu metindeki gezegen konumları ne anlatıyor?"
#    - "Bu paragrafta hangi astrolojik kavram geçiyor?"
#    - "Bu ev yerleşimi nasıl yorumlanır?"
```

**Hedef:** Minimum **1000-2000 soru-cevap çifti.**

Bunu yarı-otomatik yapacaksınız. Mevcut OpenAI/GPT'ye "bu metinden 15 astroloji sorusu ve cevabı üret" diyerek dataset oluşturun. Sonra bir astrolog kontrol etsin.

---

## Adım 3: Modeli Fine-Tuning Yap

Hedef: **Llama 3.1 8B Instruct** + senin astroloji verilerin = **astroloji uzmanı model.**

```bash
# Ollama + Unsloth ile fine-tuning (en kolay yöntem)
pip install unsloth

# Unsloth, RTX 3090'da Llama 3.1 8B'yi QLoRA ile ~2 saatte eğitir
```

Eğitim verisi formatı:

```json
[
  {
    "instruction": "Merkür retrosu doğum haritasında 3. evdeyken nasıl yorumlanır?",
    "output": "Merkür retrosu 3. evde iletişimde içe dönük, düşünceli ve geçmişe dönük bir zihin yapısı verir..."
  },
  {
    "instruction": "Satürn kavuşum Güneş transit etkisi nedir?",
    "output": "Satürn-Güneş kavuşumu, kişinin ego ve otorite ile sınanma dönemidir..."
  }
]
```

**Niye Llama 3.1 8B?** Çünkü:
- 24GB VRAM'de FP16 çalışır
- 128K context window (rapordaki Annual Report için gerekli — solar return + progression + profection + firdaria hepsi aynı promptta)
- Türkçe desteği var
- Ollama'da hazır desteği var

---

## Adım 4: Rapordaki Her Katmanı Kendi Modeline Bağla

İşte rapordaki her katmanın kendi modeline geçince ne olacağı:

| Rapordaki Katman | Şu An | Kendi Modelinde |
|------------------|-------|-----------------|
| **SystemPromptBuilder** (10+ modül) | GPT'ye uzun prompt | **Kısalır** — model astrolojiyi zaten biliyor, sadece kısa talimat yeter |
| **PromptSelectorService** | Topic keyword'leri | Aynen kalır, keyword'ler güncellenir |
| **ChartDataTransformer** | JSON chart data | Aynı JSON formatı kullanılır |
| **OpenAIServiceRefactored** | `api.openai.com` | `http://ai-sunucu:11434/v1` |
| **EmbeddingService** | `text-embedding-ada-002` | `nomic-embed-text` veya `bge-m3` (yerel) |
| **VectorSearchService** | pgvector + ada-002 | pgvector + yeni embedding (tüm tablo yeniden üretilmeli) |
| **AiService.sendMessage** | GPT SSE stream | Ollama SSE stream (aynı format) |
| **IndexController (uzun rapor)** | GPT'ye chart data + talimat | Kendi modeline aynı chart data |

---

## Adım 5: Kodda Değişecek Yerler

**Toplam 5 dosya:**

```
1. config/services.php           → base_url değişir
2. .env                          → model adı, api key, endpoint  
3. OpenAIServiceRefactored.php   → timeout, model param
4. EmbeddingService.php          → embedding model adı + endpoint
5. SystemPromptBuilder.php       → prompt'lar kısalır
```

Bu kadar. Geri kalan tüm SSE, RAG, context-aware, chart transform, uzun rapor akışı aynı kalır. Çünkü Ollama, OpenAI API formatıyla birebir uyumlu.

---

## Adım 6: İşletime Alma

```bash
# 1. Ollama'yı Ubuntu'ya kur
curl -fsSL https://ollama.com/install.sh | sh

# 2. Fine-tune ettiğin modeli yükle
ollama create astroloji-llm -f Modelfile

# 3. Embedding modelini de yükle
ollama pull nomic-embed-text

# 4. Her ikisini serve et
ollama serve  # Port 11434

# 5. Firewall'dan sadece Plesk sunucu IP'sine izin ver
sudo ufw allow from <plesk-ip> to any port 11434
```

Plesk'teki Laravel `.env`:

```env
OPENAI_BASE_URL=http://<colo-ip>:11434/v1
OPENAI_API_KEY=ollama
OPENAI_MODEL=astroloji-llm
EMBEDDING_MODEL=nomic-embed-text
```

---

## Özet: Yapılacaklar Sıralı Listesi

| # | Görev | Süre |
|---|-------|------|
| 1 | Bilgisayarı topla, Ubuntu kur, veri merkezine yerleştir | 1-2 gün |
| 2 | Ollama + embedding modelini kur | 30 dk |
| 3 | Tüm PDF'leri çıkar, 1000+ soru-cevap dataset oluştur | 1-2 hafta (en uzun adım) |
| 4 | Unsloth ile Llama 3.1 8B'yi QLoRA fine-tune et | 2 saat |
| 5 | Mevcut embedding tablosunu yeni modelle yeniden üret | 1-2 saat |
| 6 | 5 dosyada endpoint/model değiştir | 1 saat |
| 7 | Test et: chat, uzun rapor, RAG | 1 gün |

**Toplam:** 2-3 hafta. En kritik adım **veri seti kalitesi** (Adım 3). Gerisi teknik detay.
