File size: 10,376 Bytes
461adca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
# 🗄️ Альтернативи для зберігання векторної бази даних та індексів

## 📊 Поточна ситуація

- **Розмір індексів:** ~530 MB
- **Склад:** BM25 індекси, docstore, векторні представлення
- **Поточне рішення:** AWS S3

---

## 🔄 Альтернативні варіанти зберігання

### 1. 🤗 Hugging Face Datasets Hub

**Переваги:**
- ✅ Безкоштовно для публічних датасетів
- ✅ Нативна інтеграція з HF Spaces
- ✅ Git LFS для великих файлів
- ✅ Версіонування
- ✅ Швидке завантаження через CDN
- ✅ API для програмного доступу

**Недоліки:**
- ❌ Публічний доступ (якщо не приватний репозиторій)
- ❌ Обмеження на розмір файлів (5GB для LFS)

**Як використати:**
```python
from huggingface_hub import hf_hub_download, snapshot_download

# Завантажити всю папку індексів
snapshot_download(
    repo_id="DocSA/legal-position-indexes",
    repo_type="dataset",
    local_dir="Save_Index_Ivan"
)
```

**Налаштування:**
1. Створіть датасет: https://huggingface.co/new-dataset
2. Завантажте індекси:
```bash
git lfs install
git clone https://huggingface.co/datasets/DocSA/legal-position-indexes
cd legal-position-indexes
cp -r ../Save_Index_Ivan/* ./
git add .
git commit -m "Add indexes"
git push
```

---

### 2. ☁️ Google Cloud Storage (GCS)

**Переваги:**
- ✅ $0.02 за GB/місяць (дешевше за S3)
- ✅ Безкоштовні 5 GB (Always Free tier)
- ✅ Швидкий доступ з будь-якої точки світу
- ✅ Python SDK (google-cloud-storage)

**Недоліки:**
- ❌ Потрібна реєстрація GCP
- ❌ Додаткові credentials

**Як використати:**
```python
from google.cloud import storage

def download_from_gcs(bucket_name, prefix, local_dir):
    client = storage.Client()
    bucket = client.bucket(bucket_name)
    blobs = bucket.list_blobs(prefix=prefix)
    
    for blob in blobs:
        local_path = f"{local_dir}/{blob.name}"
        blob.download_to_filename(local_path)
```

**Вартість:** ~$0.01/місяць для 530MB

---

### 3. 📦 GitHub Releases

**Переваги:**
- ✅ Безкоштовно
- ✅ Простий доступ через URL
- ✅ Підтримка великих файлів (до 2GB)
- ✅ Не потрібні credentials

**Недоліки:**
- ❌ Обмеження: 2GB на файл
- ❌ Треба розбивати на частини
- ❌ Ручне оновлення

**Як використати:**
```python
import requests
import tarfile

def download_from_github_release():
    url = "https://github.com/DocSA/legal-position/releases/download/v1.0/save_index.tar.gz"
    response = requests.get(url, stream=True)
    
    with open("save_index.tar.gz", "wb") as f:
        for chunk in response.iter_content(chunk_size=8192):
            f.write(chunk)
    
    # Розпакувати
    with tarfile.open("save_index.tar.gz") as tar:
        tar.extractall(".")
```

---

### 4. 🌐 Azure Blob Storage

**Переваги:**
- ✅ Дешевий ($0.018 за GB/місяць)
- ✅ Безкоштовні 5 GB перших 12 місяців
- ✅ Python SDK (azure-storage-blob)
- ✅ Гарна інтеграція з Microsoft екосистемою

**Недоліки:**
- ❌ Потрібна реєстрація Azure
- ❌ Додаткові credentials

**Вартість:** ~$0.01/місяць для 530MB

---

### 5. 🗂️ Dropbox / Google Drive (через публічні посилання)

**Переваги:**
- ✅ Безкоштовно для невеликих обсягів
- ✅ Просто налаштувати
- ✅ Публічні посилання для завантаження

**Недоліки:**
- ❌ Не призначені для production
- ❌ Rate limits
- ❌ Можуть заблокувати посилання
- ❌ Повільне завантаження

**Не рекомендується для production!**

---

### 6. 📡 Cloudflare R2

**Переваги:**
- ✅ Безкоштовний egress (трафік на вихід)
- ✅ $0.015 за GB/місяць (дешевше за S3)
- ✅ S3-compatible API
- ✅ Безкоштовні 10 GB зберігання

**Недоліки:**
- ❌ Потрібна реєстрація Cloudflare
- ❌ Менш зрілий сервіс

**Вартість:** Безкоштовно (в межах 10GB)

---

### 7. 🏠 Вбудувати в Docker image (для HF Spaces)

**Переваги:**
- ✅ Все в одному місці
- ✅ Швидкий старт (без завантаження)
- ✅ Не потрібні додаткові сервіси

**Недоліки:**
- ❌ Великий розмір image (~1GB+)
- ❌ Повільне deployment
- ❌ Складніше оновлювати індекси

**Підходить для:** Статичних індексів, які рідко змінюються

---

### 8. 🎯 HF Space Persistent Storage

**Переваги:**
- ✅ Вбудоване в HF Spaces
- ✅ Не потрібні додаткові сервіси
- ✅ Дані зберігаються між перезапусками

**Недоліки:**
- ❌ Доступно тільки для платних планів
- ❌ Обмежений об'єм

**Вартість:** Від $5/місяць (Supporter tier)

---

## 🏆 Рекомендовані рішення

### Для production (на вибір):

#### 🥇 **Варіант 1: Hugging Face Datasets** (Найкращий для HF Spaces)
```yaml
Вартість: Безкоштовно
Складність: Низька
Швидкість: Висока
Надійність: Висока
```

#### 🥈 **Варіант 2: Cloudflare R2** (Найдешевший)
```yaml
Вартість: Безкоштовно (до 10GB)
Складність: Середня
Швидкість: Висока
Надійність: Висока
```

#### 🥉 **Варіант 3: Google Cloud Storage** (Перевірений)
```yaml
Вартість: ~$0.01/місяць
Складність: Середня
Швидкість: Висока
Надійність: Дуже висока
```

---

## 📝 Порівняльна таблиця

| Сервіс | Вартість/міс | Setup | Швидкість | Надійність | Рекомендація |
|--------|--------------|-------|-----------|------------|--------------|
| **HF Datasets** | $0 | ⭐⭐⭐ | ⚡⚡⚡ | ✅✅✅ | ⭐⭐⭐⭐⭐ |
| **Cloudflare R2** | $0 | ⭐⭐ | ⚡⚡⚡ | ✅✅✅ | ⭐⭐⭐⭐ |
| **GCS** | $0.01 | ⭐⭐ | ⚡⚡⚡ | ✅✅✅ | ⭐⭐⭐⭐ |
| **AWS S3** | $0.02 | ⭐⭐ | ⚡⚡⚡ | ✅✅✅ | ⭐⭐⭐ |
| **Azure Blob** | $0.01 | ⭐⭐ | ⚡⚡ | ✅✅✅ | ⭐⭐⭐ |
| **GitHub Releases** | $0 | ⭐⭐⭐ | ⚡⚡ | ✅✅ | ⭐⭐ |
| **Docker Image** | $0 | ⭐ | ⚡⚡⚡ | ✅✅ | ⭐⭐ |
| **Dropbox/Drive** | $0 | ⭐⭐⭐ | ⚡ | ✅ | ⭐ |

---

## 🚀 План міграції на Hugging Face Datasets (Рекомендовано)

### Крок 1: Створення датасету
```bash
# 1. Створіть новий датасет на HF
# https://huggingface.co/new-dataset
# Назва: DocSA/legal-position-indexes

# 2. Клонуйте репозиторій
git clone https://huggingface.co/datasets/DocSA/legal-position-indexes
cd legal-position-indexes

# 3. Налаштуйте Git LFS
git lfs install
git lfs track "*.json"
git lfs track "*.jsonl"
git lfs track "*.npy"
git lfs track "*.index.*"
```

### Крок 2: Завантаження індексів
```bash
# Скопіюйте індекси
cp -r ../Save_Index_Ivan/* ./

# Додайте README
cat > README.md << 'EOF'
---
license: mit
---

# Legal Position Indexes

Індекси для Legal Position AI Analyzer.

## Вміст

- BM25 retriever
- Document store
- Vector embeddings

## Використання

```python
from huggingface_hub import snapshot_download

snapshot_download(
    repo_id="DocSA/legal-position-indexes",
    repo_type="dataset",
    local_dir="Save_Index_Ivan"
)
```
EOF

# Закомітьте
git add .
git commit -m "Add legal position indexes"
git push
```

### Крок 3: Оновлення коду
```python
# Додайте в main.py або components.py

from huggingface_hub import snapshot_download
from pathlib import Path

def download_indexes_from_hf():
    """Download indexes from Hugging Face Datasets."""
    local_dir = Path("Save_Index_Ivan")
    
    if not local_dir.exists() or not list(local_dir.iterdir()):
        print("📥 Downloading indexes from Hugging Face...")
        snapshot_download(
            repo_id="DocSA/legal-position-indexes",
            repo_type="dataset",
            local_dir=str(local_dir),
            allow_patterns=["*"]
        )
        print("✅ Indexes downloaded successfully!")
    else:
        print("✅ Indexes already exist locally")

# Викликайте при ініціалізації
download_indexes_from_hf()
```

---

## 💡 Мій рекомендований підхід

**Використайте Hugging Face Datasets** з fallback на AWS S3:

```python
def load_indexes():
    """Load indexes with fallback strategy."""
    try:
        # Спробувати завантажити з HF Datasets
        download_indexes_from_hf()
    except Exception as e:
        print(f"⚠️ HF download failed: {e}")
        try:
            # Fallback на AWS S3
            download_from_s3()
        except Exception as e2:
            print(f"⚠️ S3 download failed: {e2}")
            print("❌ No indexes available")
```

**Переваги цього підходу:**
- ✅ Безкоштовно
- ✅ Швидко
- ✅ Надійно (fallback)
- ✅ Нативна інтеграція з HF Spaces

---

**Дата:** 10 лютого 2026 р.