# DEV-TASK: Реализация Snowbike RAG (MVP)

## Контекст

Есть 155K сообщений из Telegram-группы «Сноубайк Россия» (сырые JSON-файлы).
Нужно реализовать гибридный поиск: Meilisearch + ChromaDB + LLM суммаризация.

**Документация:**
- Бизнес-требования: `tasks/snowbike-rag/docs/BRD.md`
- Техническое задание: `tasks/snowbike-rag/docs/TZ.md`

**Исходные данные (только чтение):**
- `/home/node/.openclaw/workspace/data/telegram-collector/raw/1242788123/`

---

## Задача: реализовать MVP

### Шаг 1: Инфраструктура

1. Установить Docker (если нужно) и запустить Meilisearch
2. Создать `config/docker-compose.yml` для Meilisearch
3. Создать `config/requirements.txt` с зависимостями

### Шаг 2: Скрипт парсинга

4. Создать `scripts/parse_messages.py` — парсинг сырых batch-файлов в плоский JSONL
5. Обрабатывать все 12 топиков, сохранять в `data/` как JSON Lines

### Шаг 3: Индексация Meilisearch

6. Создать `scripts/index_meilisearch.py` — загрузка данных в Meilisearch
7. Настроить индекс с filterableAttributes, typoTolerance, stopWords

### Шаг 4: Индексация ChromaDB

8. Создать `scripts/index_chromadb.py` — генерация embeddings + загрузка в ChromaDB
9. Использовать sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 (бесплатная, локальная)

### Шаг 5: Поиск + LLM

10. Создать `scripts/search.py` — гибридный поиск (Meilisearch + ChromaDB) + LLM ответ
11. Использовать OpenRouter Sonnet 4.6 (ключ в `~/.openclaw/.env`)
12. Промпт должен указывать «ответь по-русски, с источниками»

### Шаг 6: Flask API

13. Создать `server.py` — HTTP API на Flask
14. Endpoint: `GET /search?q={query}&topics={topic_ids}&limit={limit}`
15. Ответ: JSON с полями query, answer, sources, count, time_ms

### Шаг 7: Тестирование

16. Протестировать на 5 запросах из списка в BRD.md
17. Убедиться что ответы содержат источники (дата, автор, топик)

---

## Критерии приёмки

- [ ] `python scripts/parse_messages.py` — создаёт JSONL файлы
- [ ] `python scripts/index_meilisearch.py` — Meilisearch заполнен
- [ ] `python scripts/index_chromadb.py` — ChromaDB заполнен
- [ ] `python server.py` — API работает на порту 5557
- [ ] `curl "http://localhost:5557/search?q=масло+для+Polaris"` — возвращает ответ с источниками
- [ ] Ответ на русском языке
- [ ] Стоимость за запрос: ~$0.005

---

## Важно

- Все файлы в `tasks/snowbike-rag/` (scripts, config, data, docs)
- Сырые данные НЕ изменять
- Индексы хранить в `tasks/snowbike-rag/data/`
- Логи: `tasks/snowbike-rag/data/logs/`
