# Improvements / TODO по оптимизации Embedding-service ## 1. Оптимизация вычислений в `VectorStore` - Заменить `np.sort(...)[-k:]` на `np.argpartition` + `np.take` для выбора top‑k: - снизит асимптотику с O(n log n) до O(n) по числу примеров; - особенно актуально при росте числа эмбеддингов до тысяч и выше. ## 2. Работа с типами данных эмбеддингов - Рассмотреть хранение эмбеддингов в `VectorStore` в формате `float16`: - веса модели остаются в `float32` (как сейчас); - вектора примеров после нормализации можно приводить к `float16`; - это даст ~2× экономию памяти на примерах при минимальной потере точности для косинусного сходства. ## 3. Управление потоками Torch - Явно ограничить количество потоков для Torch: - при инициализации добавить: - `torch.set_num_threads(1–2)` - `torch.set_num_interop_threads(1)` - это снизит конкуренцию за CPU на серверах, где крутятся ещё боты. ## 4. Батчирование запросов к модели - На будущее, если появится нагрузка: - добавить внутри `RAGService` очередь запросов на эмбеддинги и воркер, который шлёт их в модель батчами (например, окно 5–20 мс); - это уменьшит overhead от частых одиночных вызовов `encode`.