Files
agentik/memory-vector
subochev 68543357c2
ci / JVM build + tests (push) Failing after 11s
release / Publish KMP libraries → caffeine Nexus (release) Failing after 10s
feat(memory): migrate EmbeddingProvider to KMP-compatible TextEmbeddingExecutor, add :memory-md-vector, and hybrid backend support
- Replaced `EmbeddingProvider` with cross-platform `TextEmbeddingExecutor` for native target compatibility.
- Introduced `:memory-md-vector` module combining vector-cache and `.md` file-based memory systems (`hybrid` backend).
- Updated `SiglipEmbeddingProvider` to use KMP `TextEmbeddingExtractor` and streamlined compatibility via `asExecutor`.
- Added hybrid memory backend to `standalone`, supporting `.md` reconciliation with vector-cache for semantic
2026-09-21 12:28:09 +03:00
..

:memory-vector — ANN/JVector/SQLite память с эмбеддингами (JVM-only)

Что это

Реализация MemoryStore поверх SQLite + JVector

  • LLM-эмбеддинги:
  • Хранение метаданных — SQLite (notes, timestamps, источник).
  • ANN-индекс — JVector (тот же класс HNSW, что используется в Cassandra DataStax).
  • Эмбеддинги — два backendа:
    • HTTP — POST на любой OpenAI-совместимый /v1/embeddings (vLLM, LiteLLM, text-embedding-ada-002, и т.д.).
    • SigLIP2 — локальная модель через text-embedding-kmp (ONNX Runtime, без сети).

Решает: семантический поиск по памяти. "Где я рассказывал про CI/CD" находит нужный эпизод, даже если формулировка другая. При этом offline-capable через SigLIP.

Где используется

  • :standalone подключает как AGENTIK_MEMORY_BACKEND=vector (с AGENTIK_EMBEDDING_BACKEND=http|siglip).

Как подключить

dependencies {
    implementation("pw.binom.agentik:memory-vector:0.1.0")
    implementation("pw.binom.agentik:memory-api:0.1.0")
}

val memory = VectorMemorySystem.open(
    dbPath = Path("~/.agentik/mem.db"),
    embedding = HttpEmbeddingClient(
        apiUrl = "http://192.168.88.135:8001/v1",
        apiKey = "no-key-needed",
        model = "text-embedding-3-small",
        dimension = 1536,
    ),
)

Версии

gradle/libs.versions.toml → [versions] agentik-memory-vector.

Зависит от pw.binom.ai.embeddingtext:api-jvm:3.0.0-SNAPSHOT и pw.binom.ai.embeddingtext:siglip-jvm:3.0.0-SNAPSHOT из репо caffeine (см. ../gradle/libs.versions.toml). Оба опубликованы вручную (Binom-PIN-Caffeine).

Как работает embedding-флоу

  1. memory.save(cat, "text") — text → embedding (HTTP или SigLIP) → row в SQLite + вектор в JVector-индекс.
  2. memory.query(cat, "q") — q → embedding → ANN top-K (default K=10) → скоры, deduplication, реплес с timestamp.

Тесты

./gradlew :memory-vector:jvmTest

Покрывают: round-trip, ANN top-K, SigLIP (если модель скачана), SQLite-migration. SigLIP-тест skipped без модели на диске.

Чего здесь НЕТ

  • Никакого HTTP-клиента к LLM для генерации ответов. Это только embedding-клиент. Сам LLM-вызов — в :standalone.

Текущий статус

Используется продакшеном. Подходит для крупных памятей (10000+ заметок) и семантических запросов.