Skip to content

iMAGRAY/70B-1q-to-70B-lang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

SIGLA: Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ систСма памяти для Π˜Π˜β€‘Π°Π³Π΅Π½Ρ‚ΠΎΠ² (Windows/Linux/macOS)

SIGLA β€” это ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ локальная, кроссплатформСнная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для быстрого поиска ΠΏΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌ ΠΈ Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ памяти Π˜Π˜β€‘Π°Π³Π΅Π½Ρ‚ΠΎΠ². Π―Π΄Ρ€ΠΎ состоит ΠΈΠ· индСкса HNSW с Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΌ NumPy‑фолбэком ΠΈ пСрсистСнтного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π½Π° SQLite+FTS5. ВсС тяТёлыС зависимости вынСсСны Π² ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Β«extrasΒ», поэтому базовая установка лёгкая ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° ΠΈ Π±Π΅Π· GPU.

⚑ Быстрый старт

# Установка (ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ)
pip install .

# ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ: HTTP‑сСрвСр ΠΈ API
# pip install .[server]

# Π’Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΉ индСкс (HNSW с фолбэком Π½Π° NumPy)
python -c "
import numpy as np
from sigla.vector import HnswIndex

# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ индСкс ΠΈ добавляСм Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹
index = HnswIndex(dim=768)
vectors = np.random.randn(10000, 768).astype(np.float32)
index.add(vectors)

# Поиск Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΡ… сосСдСй
query = np.random.randn(768).astype(np.float32)
labels, distances = index.search(query, k=10)
print(f'НайдСно {len(labels[0])} сосСдСй')
"

πŸ“Š ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅)

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ зависит ΠΎΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ окруТСния. ΠœΡ‹ прСдоставляСм тСсты ΠΈ скрипты Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ², Π½ΠΎ Π½Π΅ заявляСм фиксированныС Β«x‑раз быстрСС» Π±Π΅Π· контСкста. Для сравнСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ benchmarks/ ΠΈ nightly workflow performance.yml.

🎯 ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ возмоТности

πŸ”₯ ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ

  • ИндСкс HNSW (hnswlib) с динамичСским ef ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ батч‑поиска
  • Ѐолбэк Π½Π° чистый NumPy для кроссплатформСнности (Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· hnswlib)
  • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅/Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² сайдкар‑файлы (.hnsw/.bin + .meta) для избСТания file‑lock Π½Π° Windows
  • WAL ΠΈ аккуратная Ρ€Π°Π±ΠΎΡ‚Π° с SQLite (WAL, PRAGMA synchronous=NORMAL, wal_checkpoint(TRUNCATE))
  • Π˜Π½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ запросов (простыС LRU/Π±Π°Ρ‚Ρ‡β€‘ΠΊΡΡˆΠΈ)

πŸ’Ύ ΠŸΠ΅Ρ€ΡΠΈΡΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

  • SQLite + FTS5 для тСкстов ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…
  • Π’Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΉ индСкс хранится рядом сайдкар‑файлами
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° удалСния элСмСнтов ΠΈ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Β«Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ совпадСния» Π² Π²Ρ‹Π΄Π°Ρ‡Π΅
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ эмбСддинги Π½Π° свои (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ transformers / sentence-transformers)

🧠 ΠŸΠ°ΠΌΡΡ‚ΡŒ Π°Π³Π΅Π½Ρ‚Π° (AgentMemory)

  • observe(text) β†’ id, recall(query, k) β†’ items, feedback(ids, reward_delta)
  • Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅: SQLite+FTS5, поиск: HNSW/NumPy, всё локально
  • ВысокоуровнСвый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ sigla.memory.api ΠΈ REST‑сСрвСр (FastAPI) sigla.memory.server

πŸš€ ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ΅ использованиС

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π² ΠΊΠΎΠ΄Π΅ (ΠΎΡ„Π»Π°ΠΉΠ½)

from sigla.memory.api import create_memory, observe_texts, recall
mem = create_memory("./agent_memory.db", dim=384)
ids = observe_texts(mem, ["text 1", "text 2"]) 
items = recall(mem, "query", k=5)

ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ запросов (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°)

from sigla.cache import CachedIndex

# ΠžΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ индСкс с ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
cached_index = CachedIndex(
    base_index, 
    cache_backend="lru",  # ΠΈΠ»ΠΈ "redis"
    cache_ttl=3600.0,
    max_size=10000
)

# ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ запросы Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈΠ· кэша
labels, distances = cached_index.search(query, k=10)

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅/Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° индСкса

index.save("./my.index")   # создаст ./my.index.meta ΠΈ ./my.index.hnsw|.bin
idx2 = HnswIndex.load("./my.index")

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ)

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π²ΠΈΠ΄Π΅ локального профилирования; сСтСвыС экспортСры ΠΈ сСрвисы ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹.

πŸ”§ АвтоматичСская оптимизация (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ)

# ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π³ΠΈΠΏΠ΅Ρ€ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π° вашСм датасСтС
python -m sigla.auto_optimizer \
    --dataset ./my_vectors.npy \
    --queries ./my_queries.npy \
    --output optimization_results.json

# Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ
python benchmarks/runner.py --dataset sift --output benchmark_results.json

πŸ“ˆ ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

# Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ тСстовых датасСтов
python scripts/download_bigann.py --dataset sift

# ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡƒΠ·ΠΊΠΈΡ… мСст
python -c "
from sigla.profiler import global_profiler
from sigla.vector import HnswIndex
import numpy as np

index = HnswIndex(dim=128)
vectors = np.random.randn(5000, 128).astype(np.float32)
queries = np.random.randn(100, 128).astype(np.float32)

# ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ
stats = global_profiler.benchmark_index_operations(index, vectors, queries)
report = global_profiler.generate_report()
print('Бамая мСдлСнная опСрация:', report['summary']['slowest_operation'])
"

πŸ”„ Production

Горячая ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ GPU‑ускорСниС доступны ΠΊΠ°ΠΊ совмСстимыС слои; ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° CPU.

Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ)

FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
RUN pip install -e .
# Π‘Π΅Π· ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΠΎΡ€Ρ‚ΠΎΠ²/сСрвСров β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ„Π»Π°ΠΉΠ½

πŸ§ͺ ВСстированиС

# Запуск тСстов
pytest -q -s

# Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ тСсты/ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π² CI (см. Workflows)

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° качСства ΠΊΠΎΠ΄Π°
python scripts/verify_done.sh

πŸ“š АрхитСктура (высокоуровнСво)

SIGLA построСн ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ:

  • sigla.vector β€” HNSW/NumPy индСксы ΠΈ Ρ€ΠΎΡƒΡ‚Π΅Ρ€; сохранСниС/Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°
  • sigla.memory.* β€” ΠΌΠΎΠ΄Π΅Π»ΠΈ, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ (локальная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π±Π΅Π· REST)
  • sigla.cache β€” простой кэш запросов ΠΈ Π±Π°Ρ‚Ρ‡β€‘ΠΊΡΡˆ
  • sigla.vector.router β€” Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€ΠΎΡƒΡ‚Π΅Ρ€ (с фолбэком ΠΏΡ€ΠΈ отсутствии FAISS)
  • sigla.faiss_stub β€” бСзопасная ΠΏΠΎΠ΄ΠΌΠ΅Π½Π° FAISS для минимальной установки
  • sigla.wal β€” WAL‑обёртка
  • sigla.advanced_monitoring / sigla.auto_optimizer β€” Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ

🀝 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

# ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ установка для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
git clone https://github.com/iMAGRAY/70B-1q-to-70B-lang.git
cd 70B-1q-to-70B-lang
pip install -e ".[dev]"

# Запуск автоматичСской ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ
python -m sigla.auto_optimizer --dataset datasets/sift/base_1m.npy --queries datasets/sift/queries.npy

# ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π°
python scripts/render_kanban.py  # Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ kanban.html

πŸ“„ ЛицСнзия

MIT License - см. LICENSE

πŸ”— БвязанныС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹

  • FAISS - Baseline для сравнСния
  • hnswlib - Базовая HNSW рСализация
  • Prometheus - ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ

Π“ΠΎΡ‚ΠΎΠ²Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ? ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ Ρ€Π°Π·Π΄Π΅Π»Ρƒ Быстрый старт.


🧠 Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π°Π³Π΅Π½Ρ‚Π° (ΠΎΡ„Π»Π°ΠΉΠ½)

Быстрый старт (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°):

from sigla.memory.api import create_memory, observe_texts, recall, feedback

mem = create_memory("./agent_memory.db", dim=384)  # SQLite+FTS5 + HnswIndex (hnswlib/NumPy)
ids = observe_texts(mem, [
  "машинноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Π΅ сСти",
  "ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ вычислСния AWS ΠΈ Azure",
  "Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСкста",
])

items = recall(mem, "Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Π΅ сСти", k=5)
feedback(mem, [ids[0]], reward_delta=1.0)

(HTTP сСрвСр ΡƒΠ΄Π°Π»Ρ‘Π½; Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ„Π»Π°ΠΉΠ½ Ρ‡Π΅Ρ€Π΅Π· Python API)

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ:

  • ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ локально: Π±Π΅Π· Π²Π½Π΅ΡˆΠ½ΠΈΡ… сСрвисов
  • ΠšΡ€ΠΎΡΡΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎ: Windows/Linux/macOS
  • Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅: SQLite + FTS5; Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΉ поиск: HNSW с фолбэком Π½Π° NumPy

Установка с Β«extrasΒ»

  • .[faiss-cpu] / .[faiss-gpu] β€” FAISS (ΠΏΠΎ ТСланию)
  • .[llm] β€” transformers/sentence-transformers

About

70B 1q to 70B lang

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors 3

  •  
  •  
  •  

Languages